Как создать файл и записать его на Java?

Каков самый простой способ создания и записи в (текстовый) файл на Java?

Обратите внимание, что каждый из примеров кода ниже может 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+ могут использовать class « Files » для записи в файлы:

Создание текстового файла:

 List lines = Arrays.asList("The first line", "The second line"); Path file = Paths.get("the-file-name.txt"); Files.write(file, lines, Charset.forName("UTF-8")); //Files.write(file, lines, Charset.forName("UTF-8"), StandardOpenOption.APPEND); 

Создание двоичного файла:

 byte data[] = ... Path file = Paths.get("the-file-name"); Files.write(file, data); //Files.write(file, data, StandardOpenOption.APPEND); 

В Java 7 и выше:

 try (Writer writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream("filename.txt"), "utf-8"))) { writer.write("something"); } - try (Writer writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream("filename.txt"), "utf-8"))) { writer.write("something"); } 

Для этого есть полезные утилиты:

  • FileUtils.writeStringtoFile (..) from commons-io
  • Files.write (..) из guava

Также обратите внимание, что вы можете использовать FileWriter , но он использует кодировку по умолчанию, которая часто является плохой идеей – лучше указать кодировку явно.

Ниже приведен исходный ответ до ответа на Java 7


 Writer writer = null; try { writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream("filename.txt"), "utf-8")); writer.write("Something"); } catch (IOException ex) { // Report } finally { try {writer.close();} catch (Exception ex) {/*ignore*/} } - Writer writer = null; try { writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream("filename.txt"), "utf-8")); writer.write("Something"); } catch (IOException ex) { // Report } finally { try {writer.close();} catch (Exception ex) {/*ignore*/} } 

См. Также: Чтение, запись и создание файлов (включая NIO2).

Если у вас уже есть контент, который вы хотите записать в файл (и не сгенерированный на лету), добавление java.nio.file.Files в Java 7 как часть встроенного ввода-вывода обеспечивает самый простой и эффективный способ достижения Ваши цели.

В основном создание и запись в файл – это только одна строка, кроме того, один простой вызов метода !

В следующем примере создаются и записываются в 6 разных файлов, чтобы продемонстрировать, как их можно использовать:

 Charset utf8 = StandardCharsets.UTF_8; List lines = Arrays.asList("1st line", "2nd line"); byte[] data = {1, 2, 3, 4, 5}; try { Files.write(Paths.get("file1.bin"), data); Files.write(Paths.get("file2.bin"), data, StandardOpenOption.CREATE, StandardOpenOption.APPEND); Files.write(Paths.get("file3.txt"), "content".getBytes()); Files.write(Paths.get("file4.txt"), "content".getBytes(utf8)); Files.write(Paths.get("file5.txt"), lines, utf8); Files.write(Paths.get("file6.txt"), lines, utf8, StandardOpenOption.CREATE, StandardOpenOption.APPEND); } catch (IOException e) { e.printStackTrace(); } 
 public class Program { public static void main(String[] args) { String text = "Hello world"; BufferedWriter output = null; try { File file = new File("example.txt"); output = new BufferedWriter(new FileWriter(file)); output.write(text); } catch ( IOException e ) { e.printStackTrace(); } finally { if ( output != null ) { output.close(); } } } } 

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

 import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; public class writer { public void writing() { try { //Whatever the file path is. File statText = new File("E:/Java/Reference/bin/images/statsTest.txt"); FileOutputStream is = new FileOutputStream(statText); OutputStreamWriter osw = new OutputStreamWriter(is); Writer w = new BufferedWriter(osw); w.write("POTATO!!!"); w.close(); } catch (IOException e) { System.err.println("Problem writing to the file statsTest.txt"); } } public static void main(String[]args) { writer write = new writer(); write.writing(); } } 

Использование:

 try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8))) { writer.write("text to write"); } catch (IOException ex) { // Handle me } 

Использование try() автоматически закрывает stream. Эта версия короткая, быстрая (буферизованная) и позволяет выбирать кодировку.

Эта функция была введена в Java 7.

Очень простой способ создания и записи в файл в Java:

 import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; public class CreateFiles { public static void main(String[] args) { try{ // Create new file String content = "This is the content to write into create file"; String path="D:\\a\\hi.txt"; File file = new File(path); // If file doesn't exists, then create it if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); // Write in file bw.write(content); // Close connection bw.close(); } catch(Exception e){ System.out.println(e); } } } 

Ссылка: Файл создает пример в java

Здесь мы вводим строку в текстовый файл:

 String content = "This is the content to write into a file"; File file = new File("filename.txt"); FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(content); bw.close(); // Be sure to close BufferedWriter 

Мы можем легко создать новый файл и добавить в него контент.

Если вы хотите иметь относительно безболезненный опыт, вы также можете посмотреть пакет IO Apache Commons , а более конкретно – class FileUtils .

Никогда не забывайте проверять сторонние библиотеки. Joda-Time для обработки даты, Apache Commons Lang StringUtils для обычных операций с строками, и это может сделать ваш код более читаемым.

Java – отличный язык, но стандартная библиотека иногда немного низкоуровневая. Мощный, но низкий уровень, тем не менее.

Поскольку автор не указал, требуется ли им решение для версий 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 SE 7 class java.io.File был механизмом, используемым для ввода-вывода файлов, но имел несколько недостатков.

  • Многие методы не выдавали исключений, когда они терпели неудачу, поэтому было невозможно получить полезное сообщение об ошибке. Например, если сбой файла не удался, программа получит «удалить сбой», но не знает, было ли это потому, что файл не существовал, у пользователя не было разрешений или возникла какая-то другая проблема.
  • Метод переименования не работал последовательно на разных платформах.
  • Не было никакой реальной поддержки символических ссылок.
  • Желательна дополнительная поддержка метаданных, такая как права доступа к файлам, владелец файла и другие атрибуты безопасности. Доступ к метаданным файлов был неэффективным.
  • Многие из методов File не масштабировались. Запрос большого каталога на сервере может привести к зависанию. Большие каталоги также могут вызывать проблемы с ресурсами памяти, что приводит к отказу в обслуживании.
  • Невозможно было написать надежный код, который мог бы рекурсивно проходить дерево файлов и отвечать соответствующим образом, если бы существовали круговые символические ссылки.

Ну что ж, это исключает 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 …-

Вот пример (упрощенный):

 Path file = ...; List linesInMemory = ...; Files.write(file, linesInMemory, StandardCharsets.UTF_8); 

Другой пример (append):

 Path file = ...; List linesInMemory = ...; Files.write(file, linesInMemory, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE); 

Если вы хотите записать содержимое файла по ходу : 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 или выше):

 Path file = ...; try (BufferedWriter writer = Files.newBufferedWriter(file)) { writer.append("Zero header: ").append('0').write("\r\n"); [...] } 

Другой пример (append):

 Path file = ...; try (BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE)) { writer.write("----------"); [...] } 

Эти методы требуют минимальных усилий со стороны автора и должны быть предпочтительнее всех остальных при записи в [текстовые] файлы.

Если вы по какой-то причине хотите отделить действие создания и записи, эквивалент Java- touch

 try { //create a file named "testfile.txt" in the current working directory File myFile = new File("testfile.txt"); if ( myFile.createNewFile() ) { System.out.println("Success!"); } else { System.out.println("Failure!"); } } catch ( IOException ioe ) { ioe.printStackTrace(); } 

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

Использование:

 JFileChooser c = new JFileChooser(); c.showOpenDialog(c); File writeFile = c.getSelectedFile(); String content = "Input the data here to be written to your file"; try { FileWriter fw = new FileWriter(writeFile); BufferedWriter bw = new BufferedWriter(fw); bw.append(content); bw.append("hiiiii"); bw.close(); fw.close(); } catch (Exception exc) { System.out.println(exc); } 

Я думаю, что это самый короткий путь:

 FileWriter fr = new FileWriter("your_file_name.txt"); // After '.' write // your file extention (".txt" in this case) fr.write("Things you want to write into the file"); // Warning: this will REPLACE your old file content! fr.close(); 

Чтобы создать файл без перезаписи существующего файла:

 System.out.println("Choose folder to create file"); JFileChooser c = new JFileChooser(); c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); c.showOpenDialog(c); c.getSelectedFile(); f = c.getSelectedFile(); // File f - global variable String newfile = f + "\\hi.doc";//.txt or .doc or .html File file = new File(newfile); try { //System.out.println(f); boolean flag = file.createNewFile(); if(flag == true) { JOptionPane.showMessageDialog(rootPane, "File created successfully"); } else { JOptionPane.showMessageDialog(rootPane, "File already exists"); } /* Or use exists() function as follows: if(file.exists() == true) { JOptionPane.showMessageDialog(rootPane, "File already exists"); } else { JOptionPane.showMessageDialog(rootPane, "File created successfully"); } */ } catch(Exception e) { // Any exception handling method of your choice } 
 import java.io.File; import java.io.FileWriter; import java.io.IOException; public class FileWriterExample { public static void main(String [] args) { FileWriter fw= null; File file =null; try { file=new File("WriteFile.txt"); if(!file.exists()) { file.createNewFile(); } fw = new FileWriter(file); fw.write("This is an string written to a file"); fw.flush(); fw.close(); System.out.println("File written Succesfully"); } catch (IOException e) { e.printStackTrace(); } } } 
 package fileoperations; import java.io.File; import java.io.IOException; public class SimpleFile { public static void main(String[] args) throws IOException { File file =new File("text.txt"); file.createNewFile(); System.out.println("File is created"); FileWriter writer = new FileWriter(file); // Writes the content to the file writer.write("Enter the text that you want to write"); writer.flush(); writer.close(); System.out.println("Data is entered into file"); } } 

Только одна строка! path и line – это строки

 import java.nio.file.Files; import java.nio.file.Paths; Files.write(Paths.get(path), lines.getBytes()); 

Самый простой способ найти:

 Path sampleOutputPath = Paths.get("/tmp/testfile") try (BufferedWriter writer = Files.newBufferedWriter(sampleOutputPath)) { writer.write("Hello, world!"); } 

Вероятно, это будет работать только на 1.7+.

Если мы используем Java 7 и выше, а также знаем, какой контент будет добавлен (добавлен) в файл, мы можем использовать метод newBufferedWriter в пакете NIO.

 public static void main(String[] args) { Path FILE_PATH = Paths.get("C:/temp", "temp.txt"); String text = "\n Welcome to Java 8"; //Writing to the file temp.txt try (BufferedWriter writer = Files.newBufferedWriter(FILE_PATH, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) { writer.write(text); } catch (IOException e) { e.printStackTrace(); } } 

Следует отметить несколько замечаний:

  1. Всегда хорошая привычка указывать кодировку кодировки и для этого у нас есть константа в classе StandardCharsets .
  2. В коде используется команда try try-with-resource в которой ресурсы автоматически закрываются после попытки.

Хотя OP не спросил, но на всякий случай мы хотим искать строки с определенным ключевым словом, например, confidential мы можем использовать streamовые API в Java:

 //Reading from the file the first line which contains word "confidential" try { Stream lines = Files.lines(FILE_PATH); Optional containsJava = lines.filter(l->l.contains("confidential")).findFirst(); if(containsJava.isPresent()){ System.out.println(containsJava.get()); } } catch (IOException e) { e.printStackTrace(); } 

Чтение и запись файлов с использованием входных и выходных streamов:

 //Coded By Anurag Goel //Reading And Writing Files import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class WriteAFile { public static void main(String args[]) { try { byte array [] = {'1','a','2','b','5'}; OutputStream os = new FileOutputStream("test.txt"); for(int x=0; x < array.length ; x++) { os.write( array[x] ); // Writes the bytes } os.close(); InputStream is = new FileInputStream("test.txt"); int size = is.available(); for(int i=0; i< size; i++) { System.out.print((char)is.read() + " "); } is.close(); } catch(IOException e) { System.out.print("Exception"); } } } 

Просто включите этот пакет:

 java.nio.file 

И тогда вы можете использовать этот код для записи файла:

 Path file = ...; byte[] buf = ...; Files.write(file, buf); 

Это стоит попробовать для Java 7+:

  Files.write(Paths.get("./output.txt"), "Information string herer".getBytes()); 

Это выглядит многообещающе …

Для нескольких файлов вы можете использовать:

 static void out(String[] name, String[] content) { File path = new File(System.getProperty("user.dir") + File.separator + "OUT"); for (File file : path.listFiles()) if (!file.isDirectory()) file.delete(); path.mkdirs(); File c; for (int i = 0; i != name.length; i++) { c = new File(path + File.separator + name[i] + ".txt"); try { c.createNewFile(); FileWriter fiWi = new FileWriter(c.getAbsoluteFile()); BufferedWriter buWi = new BufferedWriter(fiWi); buWi.write(content[i]); buWi.close(); } catch (IOException e) { e.printStackTrace(); } } } 

Он отлично работает.

Вот некоторые из возможных способов создания и записи файла в Java:

Использование FileOutputStream

 try { File fout = new File("myOutFile.txt"); FileOutputStream fos = new FileOutputStream(fout); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos)); bw.write("Write somthing to the file ..."); bw.newLine(); bw.close(); } catch (FileNotFoundException e){ // File was not found e.printStackTrace(); } catch (IOException e) { // Problem when writing to the file e.printStackTrace(); } 

Использование FileWriter

 try { FileWriter fw = new FileWriter("myOutFile.txt"); fw.write("Example of content"); fw.close(); } catch (FileNotFoundException e) { // File not found e.printStackTrace(); } catch (IOException e) { // Error when writing to the file e.printStackTrace(); } 

Использование PrintWriter

 try { PrintWriter pw = new PrintWriter("myOutFile.txt"); pw.write("Example of content"); pw.close(); } catch (FileNotFoundException e) { // File not found e.printStackTrace(); } catch (IOException e) { // Error when writing to the file e.printStackTrace(); } 

Использование OutputStreamWriter

 try { File fout = new File("myOutFile.txt"); FileOutputStream fos = new FileOutputStream(fout); OutputStreamWriter osw = new OutputStreamWriter(fos); osw.write("Soe content ..."); osw.close(); } catch (FileNotFoundException e) { // File not found e.printStackTrace(); } catch (IOException e) { // Error when writing to the file e.printStackTrace(); } 

Для дальнейшего изучения этого руководства о том, как читать и записывать файлы на Java .

Есть несколько простых способов, например:

 File file = new File("filename.txt"); PrintWriter pw = new PrintWriter(file); pw.write("The world I'm coming"); pw.close(); String write = "Hello World!"; FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); fw.write(write); fw.close(); 

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

 File file = new File(System.*getProperty*("java.io.tmpdir") + System.*getProperty*("file.separator") + "YourFileName.txt"); 

Используя Google Guava-библиотеку, мы можем легко создавать и писать в файл.

 package com.zetcode.writetofileex; import com.google.common.io.Files; import java.io.File; import java.io.IOException; public class WriteToFileEx { public static void main(String[] args) throws IOException { String fileName = "fruits.txt"; File file = new File(fileName); String content = "banana, orange, lemon, apple, plum"; Files.write(content.getBytes(), file); } } 

В примере создается новый файл fruits.txt в корневом каталоге проекта.

Чтение коллекции с клиентами и сохранение в файл с помощью JFilechooser.

 private void writeFile(){ JFileChooser fileChooser = new JFileChooser(this.PATH); int retValue = fileChooser.showDialog(this, "Save File"); if (retValue == JFileChooser.APPROVE_OPTION){ try (Writer fileWrite = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileChooser.getSelectedFile())))){ this.customers.forEach((c) ->{ try{ fileWrite.append(c.toString()).append("\n"); } catch (IOException ex){ ex.printStackTrace(); } }); } catch (IOException e){ e.printStackTrace(); } } } 

лучший способ – использовать Java7: Java 7 представляет новый способ работы с файловой системой, а также новый class утилиты – Files. Используя class Files, мы можем создавать, перемещать, копировать, удалять файлы и каталоги; его также можно использовать для чтения и записи в файл.

 public void saveDataInFile(String data) throws IOException { Path path = Paths.get(fileName); byte[] strToBytes = data.getBytes(); Files.write(path, strToBytes); } 

Запись с помощью FileChannel Если вы имеете дело с большими файлами, FileChannel может быть быстрее стандартного ввода-вывода. Следующий код записывает String в файл с помощью FileChannel:

 public void saveDataInFile(String data) throws IOException { RandomAccessFile stream = new RandomAccessFile(fileName, "rw"); FileChannel channel = stream.getChannel(); byte[] strBytes = data.getBytes(); ByteBuffer buffer = ByteBuffer.allocate(strBytes.length); buffer.put(strBytes); buffer.flip(); channel.write(buffer); stream.close(); channel.close(); } 

Запись с помощью DataOutputStream

 public void saveDataInFile(String data) throws IOException { FileOutputStream fos = new FileOutputStream(fileName); DataOutputStream outStream = new DataOutputStream(new BufferedOutputStream(fos)); outStream.writeUTF(data); outStream.close(); } 

Запись с помощью FileOutputStream

Давайте посмотрим, как мы можем использовать FileOutputStream для записи двоичных данных в файл. Следующий код преобразует строковые байты и записывает байты в файл с помощью FileOutputStream:

 public void saveDataInFile(String data) throws IOException { FileOutputStream outputStream = new FileOutputStream(fileName); byte[] strToBytes = data.getBytes(); outputStream.write(strToBytes); outputStream.close(); } 

Write with PrintWriter мы можем использовать PrintWriter для записи форматированного текста в файл:

 public void saveDataInFile() throws IOException { FileWriter fileWriter = new FileWriter(fileName); PrintWriter printWriter = new PrintWriter(fileWriter); printWriter.print("Some String"); printWriter.printf("Product name is %s and its price is %d $", "iPhone", 1000); printWriter.close(); } 

Напишите с помощью BufferedWriter: используйте BufferedWriter для записи String в новый файл:

 public void saveDataInFile(String data) throws IOException { BufferedWriter writer = new BufferedWriter(new FileWriter(fileName)); writer.write(data); writer.close(); } 

добавьте строку в существующий файл:

 public void saveDataInFile(String data) throws IOException { BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true)); writer.append(' '); writer.append(data); writer.close(); } 

В Java 8 используйте файлы и пути и используйте конструкцию try-with-resources.

 import java.io.BufferedWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class WriteFile{ public static void main(String[] args) throws IOException { String file = "text.txt"; System.out.println("Writing to file: " + file); // Files.newBufferedWriter() uses UTF-8 encoding by default try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(file))) { writer.write("Java\n"); writer.write("Python\n"); writer.write("Clojure\n"); writer.write("Scala\n"); writer.write("JavaScript\n"); } // the file will be automatically closed } } 
  • Правильный способ проверки версии Java из сценария BASH
  • Для чего же Spring Framework?
  • Ресурс Java как файл
  • Компиляция java-программы в исполняемый файл
  • Как избежать установки файлов политики JCE «Неограниченная сила» при развертывании приложения?
  • Вложение в Java
  • Понимание java.util.Calendar WEEK_OF_YEAR
  • ejb lookup не работает с NamingException
  • Как разрешить ввод только цифр в jTextField?
  • Лучшая практика использования HttpClient в многопоточной среде
  • setUp / tearDown (@ Before / @ After), почему мы нуждаемся в них в JUnit?
  • Interesting Posts

    Какие шаги вы следуете и рекомендуете ли вы делать Windows XP быстрее?

    Моя гамма автоматически переходит из режима ожидания

    MVC Html.Partial или Html.Action

    Путь к файлу txt для Android

    Arrays.asList () массива

    Предупреждать пользователя о несохраненных изменениях перед выходом на страницу

    Почему конструктор копирования не вызывается?

    Отправка форматированного текстового сообщения Lotus Notes из Excel VBA

    Отправка клавиши F1 – F12 с внешней клавиатурой с отсутствующими клавишами на iPad Pro с использованием программного обеспечения эмуляции SSH

    Каковы доступные типы данных для ‘dtype’ с loadtxt () для NumPy genfromtxt?

    Переместить существующую установку Windows 7 или 10 на новый компьютер?

    Выбор автономного полнотекстового поискового сервера: Sphinx или SOLR?

    Динамически создавать столбцы для кросс-таблицы в PostgreSQL

    Повторная попытка неудачных запросов HttpClient

    Соответствие строк с помощью шаблона

    Давайте будем гением компьютера.