Запись в текстовом файле с использованием java swing [duplicate]

Это устраняет проблему в Swift 4:

Измените код ниже

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {}

на следующее:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {}
498
задан Rafael Winterhalter 23 September 2015 в 14:06
поделиться

9 ответов

В дополнение к свойству line.separator, если вы используете java 1.5 или новее и String.format (или другие методы форматирования), вы можете использовать %n, как в

Calendar c = ...;
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY%n", c); 
//Note `%n` at end of line                                  ^^

String s2 = String.format("Use %%n as a platform independent newline.%n"); 
//         %% becomes %        ^^
//                                        and `%n` becomes newline   ^^

. API Java 1.8 для Formatter для более подробной информации.

344
ответ дан Brian McCutchon 18 August 2018 в 05:23
поделиться
  • 1
    Спасибо! Я уверен, что System.getProperty (& quot; line.separator & quot;); имеет свои применения, но я устал видеть: «Линия 1». + System.getProperty ("line.separator") + "Строка 2" – Buttons840 26 August 2011 в 23:02
  • 2
    О мой, «Линия 1». + System.getProperty ("line.separator") + "Строка 2" действительно является одной из самых уродливых вещей, которые я когда-либо видел. Просто объявление константы в другом месте было бы менее болезненным. – abahgat 16 December 2011 в 12:56
  • 3
    это не работает, по крайней мере, со строкой, входящей в оператор log4j. Создание примера с новой строкой в ​​конце потенциально скрывает проблему. Кроме того, строка s2 просто путается, используя '%% n' – Stealth Rabbi 10 May 2013 в 16:02
  • 4
    Не используйте это, если ваша строка может содержать % из пользовательского ввода! – Konstantin Weitz 12 November 2013 в 23:09
  • 5
    @KonstantinWeitz, проблема String.format(s + "%n") легко решается String.format("%s%n", s). Всегда рискованно включать пользовательский ввод в качестве тела формата (так же, как eval()). – Franklin Yu 5 May 2016 в 04:11

Это также возможно: String.format("%n").

Или String.format("%n").intern() для сохранения некоторых байтов.

28
ответ дан ceving 18 August 2018 в 05:23
поделиться
  • 1
    Это то же самое, что и ответ Алекса Б. – Spoike 29 April 2013 в 08:49
  • 2
    О, теперь я вижу это. Он написал так много незаданных вещей вокруг своего ответа. ;-) – ceving 29 April 2013 в 11:07
  • 3
    Я попытался это сделать, но когда я просмотрел файл в блокноте, он не распознал новую строку. – mr5 25 June 2015 в 06:43
  • 4
    @ mr5 notepad не является правильным инструментом для просмотра содержимого файла. Используйте hexdump или od . – ceving 25 June 2015 в 12:18
  • 5
    @ceving Я нахожусь в среде Windows, и я ожидал, что новая строка будет комбинацией \r\n – mr5 25 June 2015 в 23:58

Используйте метод newLine() класса BufferedWriter, который обеспечивает независимый от платформы способ записи новой строки в файле

11
ответ дан fstang 18 August 2018 в 05:23
поделиться

Библиотека commons-lang имеет постоянное поле, доступное под названием SystemUtils.LINE_SEPARATOR

22
ответ дан hotshot309 18 August 2018 в 05:23
поделиться
  • 1
    Да, установите стороннюю библиотеку, чтобы получить независимую от новой линии новую платформу! #facepalm – Shervin Asgari 7 January 2014 в 13:37
  • 2
    @Shervin, конечно, вы бы этого не сделали, но многие проекты, над которыми я работал, уже используют commons-lang и некоторую более старую версию Java. Поэтому, если вы, вероятно, уже используете commons-lang, тогда это разумный ответ. Я не считал нужным указать на это, я, очевидно, был неправ. – lexicalscope 7 January 2014 в 18:06
  • 3
    Это действительно хорошее предложение для проектов, которые уже используют эту библиотеку, спасибо! – Alexis Leclerc 6 March 2014 в 18:19

Вы можете использовать

System.getProperty("line.separator");

, чтобы получить разделитель строк

626
ответ дан Keppil 18 August 2018 в 05:23
поделиться
  • 1
    Позаботьтесь о добавлении данных Java 7 System.lineSeparator(), так что вот окончательный ответ на этот вопрос? – Gray 6 July 2018 в 16:11

Java 7 теперь имеет метод System.lineSeparator() .

620
ответ дан Luiggi Mendoza 18 August 2018 в 05:23
поделиться
  • 1
    Было бы очень приятно, если бы они предоставили перегруженный метод lineSeperator(int), который возвращает некоторое количество разделителей строк, так как я часто обнаруживаю, что использую 2 сразу. – Kon 12 March 2016 в 00:22
  • 2
    @Kon На основании этот ответ : String.join("", Collections.nCopies(5, System.lineSeparator())) – Samuel Harmer 1 March 2017 в 12:05

Если вы пытаетесь записать новую строку в файл, вы можете просто использовать метод newLine () BufferedWriter.

41
ответ дан Michael Myers 18 August 2018 в 05:23
поделиться
StringBuilder newLine=new StringBuilder();
newLine.append("abc");
newline.append(System.getProperty("line.separator"));
newline.append("def");
String output=newline.toString();

Вышеприведенный фрагмент будет иметь две строки, разделенные новой строкой независимо от платформ.

9
ответ дан Sathesh Balakrishnan Manohar 18 August 2018 в 05:23
поделиться

Избегайте добавления строк с помощью String + String и т. д. Вместо этого используйте StringBuilder.

String separator = System.getProperty( "line.separator" );
StringBuilder lines = new StringBuilder( line1 );
lines.append( separator );
lines.append( line2 );
lines.append( separator );
String result = lines.toString( );
-1
ответ дан skiphoppy 18 August 2018 в 05:23
поделиться
  • 1
    В большинстве случаев это не имеет значения, Джефф Этвуд из Coding Horror сделал сообщение в блоге об этой конкретной микро-оптимизации . Всегда делайте метрики перед тем, как делать претензии, такие как «не выполнять string + string». – Spoike 5 December 2012 в 15:43
  • 2
    Я бы сказал, что статья Джеффа может немного уйти, поскольку она касается времени исполнения. Конкатенация строк в Java - это не только скорость выполнения, но и объем выгрузки мусора в памяти для очистки GC, что может привести к тому, что GC работает чаще. Это может быть или не быть проблемой в зависимости от вашей среды и конфигурации. – Lajcik 17 December 2012 в 16:22
  • 3
    Лайчик, я подозреваю, что это предварительная оптимизация для всех случаев, кроме тех, кто действительно много манипулирует строками. StringBuffer является анти-шаблоном для небольших требований конкатенации. Во многих случаях я бы предпочел прочитать читаемый String1 + separator + String2, чем вышеупомянутый многострочный пример. Кроме того, я бы предложил проверить, память и amp; Эффективное воздействие GC оказывает добавление SB. Во многих случаях я предполагаю, что это не так. Если это не стоит тестировать, это, вероятно, предварительная оптимизация, и я бы сосредоточился на удобочитаемости. – Richard Watson 10 January 2013 в 12:48
  • 4
    Выполнение String1 + String2 аналогично выполнению нового StringBuilder (String1) .append (String2) в современных компиляторах, поэтому нет никакой оптимизации для одной строки liner concat. StringBuilder вообще стоит его только в циклах или рекурсивных методах. Но в любом случае это может оказаться вне сферы действия первоначального вопроса. – user327961 15 May 2013 в 13:48
  • 5
    @ user327961: истинный рассказ. Это можно легко доказать, используя вашу любимую IDE и отладчик. – Atmocreations 10 October 2013 в 06:19
Другие вопросы по тегам:

Похожие вопросы: