Какой самый простой способ создать и записать (текстовый) файл в Java?
1383
Обратите внимание, что каждый из приведенных ниже примеров кода может выдать IOException
. Для краткости блоки try / catch / finally были опущены. Смотрите это руководство для получения информации об обработке исключений.
Обратите внимание, что каждый из приведенных ниже примеров кода перезапишет файл, если он уже существует.
Создание текстового файла:
PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();
Создание бинарного файла:
byte data[] = ...
FileOutputStream out = new FileOutputStream("the-file-name");
out.write(data);
out.close();
Пользователи Java 7+ могут использоватьFiles
класс для записи в файлы:
Создание текстового файла:
List<String> lines = Arrays.asList("The first line", "The second line");
Path file = Paths.get("the-file-name.txt");
Files.write(file, lines, StandardCharsets.UTF_8);
//Files.write(file, lines, StandardCharsets.UTF_8, StandardOpenOption.APPEND);
Создание бинарного файла:
byte data[] = ...
Path file = Paths.get("the-file-name");
Files.write(file, data);
//Files.write(file, data, StandardOpenOption.APPEND);
"PrintWriter prints formatted representations of objects to a text-output stream. "
ответ Божо более правильный, хотя и выглядит громоздким (вы всегда можете обернуть его каким-нибудь служебным методом).writer.close()
должен быть в окончательном блокеВ Java 7 и выше:
Для этого есть полезные утилиты:
Обратите внимание, что вы можете использовать
FileWriter
, но он использует кодировку по умолчанию, что часто является плохой идеей - лучше указывать кодировку явно.Ниже приведен оригинальный ответ до Java 7
См. Также: Чтение, запись и создание файлов (включая NIO2).
источник
close()
любого потока, обернутого вокруг любого другого, также закроет все внутренние потоки.Если у вас уже есть контент, который вы хотите записать в файл (а не сгенерированный на лету),
java.nio.file.Files
добавление в Java 7 как часть встроенного ввода-вывода обеспечивает самый простой и эффективный способ достижения ваших целей.По сути, создание и запись в файл занимает всего одну строку, причем один простой вызов метода !
Следующий пример создает и записывает в 6 различных файлов, чтобы продемонстрировать, как его можно использовать:
источник
источник
output.close()
выдает IOExceptionВот небольшой пример программы для создания или перезаписи файла. Это длинная версия, поэтому ее легче понять.
источник
Очень простой способ создания и записи в файл на Java:
источник
File.exists()/createNewFile()
Код здесь как бессмысленно и расточительно. Операционная система уже должна делать то же самое приnew FileWriter()
создании. Вы заставляете все это происходить дважды.FileWriter
следующим образом:new FileWriter(file.getAbsoluteFile(),true)
Использование:
С помощью
try()
закроет поток автоматически. Эта версия короткая, быстрая (буферизованная) и позволяет выбирать кодировку.Эта функция была введена в Java 7.
источник
StandardCharsets.UTF_8
вместо строки «utf-8» (это предотвращает ошибки опечаток)...new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8)...
-java.nio.charset.StandardCharsets
введено в Java 7Здесь мы вводим строку в текстовый файл:
Мы можем легко создать новый файл и добавить в него содержимое.
источник
Поскольку автор не указал, требуется ли им решение для версий Java, которые были EoL'd (как Sun, так и IBM, и они являются технически наиболее распространенными JVM), и из-за того, что большинство людей, похоже, ответили на На вопрос автора, прежде чем было указано, что это текстовый (недвоичный) файл, я решил предоставить свой ответ.
Прежде всего, Java 6, как правило, достиг конца жизни, и, поскольку автор не указал, что ему нужна устаревшая совместимость, я предполагаю, что это автоматически означает Java 7 или выше (Java 7 еще не EoL'd от IBM). Итак, мы можем взглянуть прямо на учебник по вводу / выводу файла: https://docs.oracle.com/javase/tutorial/essential/io/legacy.html
Ну что ж, это исключает java.io.File. Если файл не может быть записан / добавлен, вы не сможете даже знать, почему.
Мы можем продолжить изучение учебника: https://docs.oracle.com/javase/tutorial/essential/io/file.html#common.
Если у вас есть все строки, которые вы напишите (добавите) в текстовый файл заранее , рекомендуемый подход https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#. записи java.nio.file.Path-java.lang.Iterable-java.nio.charset.Charset-java.nio.file.OpenOption ...-
Вот пример (упрощенный):
Другой пример (приложение):
Если вы хотите писать содержимое файла по ходу дела : https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedWriter-java.nio.file.Path-java .nio.charset.Charset-java.nio.file.OpenOption ...-
Упрощенный пример (Java 8 или выше):
Другой пример (приложение):
Эти методы требуют минимальных усилий со стороны автора и должны быть предпочтительнее всех остальных при записи в [текстовые] файлы.
источник
FileNotFoundException
который выбрасывается при сбое операции.Если вы хотите получить сравнительно безболезненный опыт, вы также можете взглянуть на пакет Apache Commons IO , а точнее на
FileUtils
класс .Никогда не забывайте проверять сторонние библиотеки. Joda-Time для манипулирования датами, Apache Commons Lang
StringUtils
для обычных строковых операций и тому подобное могут сделать ваш код более читабельным.Java - отличный язык, но стандартная библиотека иногда немного низкоуровневая. Мощный, но все же низкий уровень.
источник
FileUtils
этоstatic void write(File file, CharSequence data)
. Пример использования:import org.apache.commons.io.FileUtils;
FileUtils.write(new File("example.txt"), "string with data");
.FileUtils
также имеетwriteLines
, который занимаетCollection
линии.Если вы по какой - то причине хотите , чтобы отделить акт создания и написания, эквивалент Java из
touch
IScreateNewFile()
делает проверку существования и файл создается атомарно. Это может быть полезно, например, если вы хотите убедиться, что вы были создателем файла перед записью в него.источник
touch
в виду не в общем смысле, а в его обычном вторичном использовании для создания файла без записи в него данных. Документированная цель касания - обновить временную метку в файле. Создание файла, если он не существует, на самом деле является побочным эффектом, и его можно отключить переключателем.exists()/createNewFile()
последовательности буквально пустая трата времени и пространства.Вот некоторые из возможных способов создания и записи файла в Java:
Использование FileOutputStream
Использование FileWriter
Использование PrintWriter
Использование OutputStreamWriter
Для дальнейшей проверки этого учебника о том, как читать и писать файлы в Java .
источник
FileWriter
илиOutputStreamWriter
быть закрыто в окончательном блоке?Использование:
источник
Лучше всего использовать Java7: Java 7 представляет новый способ работы с файловой системой, наряду с новым служебным классом - Files. Используя класс Files, мы можем создавать, перемещать, копировать, удалять файлы и каталоги; он также может быть использован для чтения и записи в файл.
Запись с FileChannel Если вы имеете дело с большими файлами, FileChannel может быть быстрее, чем стандартный ввод-вывод. Следующий код записывает String в файл, используя FileChannel:
Написать с помощью DataOutputStream
Написать с помощью FileOutputStream
Давайте теперь посмотрим, как мы можем использовать FileOutputStream для записи двоичных данных в файл. Следующий код преобразует байты String int и записывает байты в файл, используя FileOutputStream:
Напишите с PrintWriter, мы можем использовать PrintWriter для записи отформатированного текста в файл:
Запись с помощью BufferedWriter: используйте BufferedWriter для записи строки в новый файл:
добавить строку к существующему файлу:
источник
Я думаю, что это самый короткий путь:
источник
Чтобы создать файл без перезаписи существующего файла:
источник
источник
exists()/createNewFile()
последовательности буквально пустая трата времени и пространства.источник
exists()/createNewFile()
последовательности буквально пустая трата времени и пространства.Только одна строка!
path
иline
строкиисточник
lines
. Если этоjava.lang.String
, то вызовgetBytes()
будет генерировать байты, используя кодировку платформы по умолчанию , что не очень хорошо в общем случае.Самый простой способ, который я могу найти:
Это, вероятно, будет работать только для 1,7+.
источник
Стоит попробовать для Java 7+:
Это выглядит многообещающе ...
источник
Если мы используем Java 7 и выше, а также знаем, какое содержимое нужно добавить (добавить) в файл, мы можем использовать метод newBufferedWriter в пакете NIO.
Есть несколько моментов, на которые стоит обратить внимание:
StandardCharsets
.try-with-resource
оператор, в котором ресурсы автоматически закрываются после попытки.Хотя OP не спрашивал, но на всякий случай мы хотим искать строки, имеющие какое-то конкретное ключевое слово, например,
confidential
мы можем использовать потоковые API в Java:источник
Чтение и запись файлов с использованием input и outputtream:
источник
Просто включите этот пакет:
И тогда вы можете использовать этот код для записи файла:
источник
В Java 8 используются файлы и пути и используется конструкция try-with-resources.
источник
Есть несколько простых способов, таких как:
источник
bw
не используется.Вы даже можете создать временный файл, используя системное свойство , которое будет зависеть от того, какую ОС вы используете.
источник
Используя библиотеку Google Guava, мы можем очень легко создавать и записывать в файл.
В этом примере создается новый
fruits.txt
файл в корневом каталоге проекта.источник
Чтение коллекции с клиентами и сохранение в файл, с JFilechooser.
источник
Существует как минимум несколько способов создания файла и записи в него:
Небольшие файлы (1.7)
Вы можете использовать один из методов записи для записи байтов или строк в файл.
Эти методы позаботятся о большей части работы за вас, такой как открытие и закрытие потока, но не предназначены для обработки больших файлов.
Запись файла большего размера с использованием буферизованного потокового ввода-вывода (1.7)
В
java.nio.file
пакет поддерживает канал ввода / вывода, который перемещает данные в буфер, минуя некоторые из слоев , которые могут узким местом Поток ввода / вывода.Этот подход предпочтителен из-за его эффективной производительности, особенно при выполнении большого количества операций записи. Буферизованные операции имеют этот эффект, поскольку они не обязаны вызывать метод записи операционной системы для каждого отдельного байта, что сокращает дорогостоящие операции ввода-вывода.
Использование NIO API для копирования (и создания нового) файла с Outputstream (1.7)
Существуют также дополнительные методы, которые позволяют копировать все байты из входного потока в файл.
FileWriter (текст) (<1,7)
Записывает непосредственно в файл (меньше производительности) и должен использоваться только тогда, когда количество записей меньше. Используется для записи символьно-ориентированных данных в файл.
FileOutputStream (двоичный) (<1,7)
FileOutputStream предназначен для записи потоков необработанных байтов, таких как данные изображения.
При таком подходе следует всегда записывать массив байтов, а не писать по одному байту за раз. Ускорение может быть весьма значительным - до 10 и более раз. Поэтому рекомендуется использовать
write(byte[])
методы всякий раз, когда это возможно.источник