n (новая строка) не работает при создании текстового файла

#java #spring-boot #file #download

Вопрос:

Я хочу загрузить текстовый файл, нажав на кнопку, все работает нормально, как и ожидалось. Но проблема в том, что данные, которые я хочу вставить в текстовый файл, состоят всего из одной строки.

Строка fileContent = «Простое решение Загрузить пример 1»; здесь n не работает. Это приводит к выходу в виде:

 Simple Solution Download Example 1
 

Фрагменты кода:

интерфейс:

введите описание изображения здесь

реализация интерфейса в моем классе обслуживания:

введите описание изображения здесь

контроллер:

введите описание изображения здесь

Комментарии:

1. Пожалуйста, опубликуйте код в виде текста, а не в виде изображений.

2. В Windows конец строки состоит из двух символов «rn».

3. Я сам не знаю, как это сделать, но вам лучше сохранить n единственное, но записывать в файл в виде текста, а не двоичного файла, иначе пользователи Linux и Mac будут жаловаться на лишнее r , когда они пишут.

4. Из моего офиса я не могу видеть ваш код, пожалуйста, опубликуйте код как код, а не как внешнюю ссылку

Ответ №1:

Не используйте жестко n rn закодированные разделители строк — разделители строк зависят от платформы (Windows отличается от всех других ОС).

Что вы можете сделать, так это:

  1. Воспользуйся System.lineSeparator()
  2. Создавайте контент с String.format() помощью и заменяйте n его %n

Комментарии:

1. Мне нужно развернуть приложение в моем Linux env, поэтому я использовал System.LineSeparator(); в противном случае rn отлично работает в Windows. Спасибо за рекомендацию.

Ответ №2:

Основная проблема заключается в том, что серверный компьютер и клиентский компьютер в основном независимы в отношении кодировки набора символов и разделителей строк. По умолчанию не подойдет.

  1. Поскольку мы живем в мире, ориентированном на Windows (я линуксер), пользователь "rn" .
  2. Затем java может смешивать любой сценарий Unicode. Файл не содержит информации о его кодировке. Если он возникает на другом компьютере/платформе, это вызывает проблемы.
      String fileContent = "Simple Solution façade, mañana, €rn"
           "Download Обичам ĉĝĥĵŝŭ Example 1";
     

    Таким образом, исходный компьютер явно определяет кодировку. Этого не должно быть:

      fileContent.getBytes(); // Default platform encoding Charset.defaultCharset().
     

    Таким образом, исходный компьютер может выполнять:

      fileContent.getBytes(StandardCharsets.UTF_8); // UTF-8, full Unicode.
     fileContent.getBytes("Windows-1252); // MS Windows Latin 1, some ? failures.
     

    Тип содержимого может быть установлен соответствующим образом в "text/plain;charset=UTF-8" Windows-1252 или для Windows-1252 "text/plain;charset=ISO-8859-1" .

    И из этого byte[] вы должны сделать вывод .length о длине содержимого.

  3. Для записи в файл можно использовать Files.WriteString

    В этом случае используйте Files.size(exportedPath) для длины содержимого.

  4. Files.newInputStream(exportedPath) это третий товар из файлов.