2009-06-27 3 views

ответ

66

Посмотрите на Java File API

быстрый пример:

try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) { 
    out.print(text); 
} 
+0

@ XP1 Я знаю, это отличное улучшение. Я использовал Lombok для этого в Java 6: просто запустите '@Cleanup новый FileOutputStream (...)', и все готово. – Jorn

+1

Не забудьте вызвать out.flush(); затем out.close(); –

49

Использование FileUtils.writeStringToFile() из Apache Commons IO. Не нужно изобретать это колесо.

+18

Я не мог больше не согласиться. Эти библиотеки существуют, поэтому мы не вводим тонкие ошибки в такое простое решение. – skaffman

+1

+1 для применения «знать и использовать библиотеки» – Jonik

+1

Вы предложили бы ему вернуться и повторно реализовать java.file.IO и java.io.PrintStream в raw C? Конечно нет. Вы используете абстракции java.io и сохраняете свои усилия для реальных проблем. И Commons IO - лучшая абстракция, чем java.io, когда дело доходит до этой конкретной проблемы. – skaffman

72

Просто сделал что-то подобное в моем проекте. Использование FileWriter упростит часть вашей работы. И здесь вы найдете красивые tutorial.

BufferedWriter writer = null; 
try 
{ 
    writer = new BufferedWriter(new FileWriter(yourfilename)); 
    writer.write(yourstring); 

} 
catch (IOException e) 
{ 
} 
finally 
{ 
    try 
    { 
     if (writer != null) 
     writer.close(); 
    } 
    catch (IOException e) 
    { 
    } 
} 
+3

Удаление всех попыток/улов и их упрощение Я также могу сделать это в одной строке, просто выполнив: (новый BufferedWriter (новый FileWriter (имя файла))). Write (str); –

+6

Итак, покажите свое простое и приятное решение. Я был бы рад узнать, как это сделать лучше. –

+4

Игнорируйте троллей ... они всегда критикуют, не предлагая своего решения. Спасибо, что спасли меня от написания собственного кода/загрузки дополнительной библиотеки и введения зависимости ... – kape123

562

Если вы просто выводит текст, а не каких-либо двоичные данные, следующие будут работать:

PrintWriter out = new PrintWriter("filename.txt"); 

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

out.println(text); 

Вам потребуется обработка исключений, как всегда. Обязательно позвоните по номеру out.close(), когда вы закончите писать.

Если вы используете Java 7 или более поздней версии, вы можете использовать «try-with-resources statement», который будет автоматически закрывать ваши PrintStream, когда вы сделали с ним (то есть выхода из блока) следующим образом:

try (PrintWriter out = new PrintWriter("filename.txt")) { 
    out.println(text); 
} 

Вы будете все равно нужно явно бросить java.io.FileNotFoundException, как и раньше.

+0

Что такое обработка исключений? Где будет сохранен этот файл? –

+0

он будет сохранен в текущем каталоге, независимо от того, что касается JVM. Обработка исключений - это попытка {} catch() {}, которую вы видите в других ответах). –

+4

@ Justin, вы также можете передать абсолютный путь (например, «/tmp/filename.txt») в конструктор FileOutputStream, чтобы сохранить файл в любом месте. – Jonik

207

Apache Commons IO содержит некоторые большие способы делать это, в частности, FileUtils содержит следующий метод:

static void writeStringToFile(File file, String data) 

, которая позволяет вводить текст в файл в один вызов метода:

FileUtils.writeStringToFile(new File("test.txt"), "Hello File"); 

Вы также может потребовать также указать кодировку для файла.

+10

Просто небольшая коррекция, второй фрагмент должен читать: FileUtils.writeStringToFile (новый файл («test.txt»), «Hello File»); –

+3

Для тех из нас, кто предпочитает Гуаву, [он тоже может это сделать] (http://stackoverflow.com/questions/1053467/how-do-i-save-a-string-to-a-text-file-using -java/11254277 # 11254277). – Jonik

+3

Теперь функция устарела, вы должны добавить кодировку по умолчанию -> «FileUtils.writeStringToFile (новый файл (« test.txt »),« Hello File », forName (« UTF-8 »)),' –

21

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

import java.io.*; 

public class Main { 

    public static void main(String[] args) { 

     try { 
      String str = "SomeMoreTextIsHere"; 
      File newTextFile = new File("C:/thetextfile.txt"); 

      FileWriter fw = new FileWriter(newTextFile); 
      fw.write(str); 
      fw.close(); 

     } catch (IOException iox) { 
      //do stuff with exception 
      iox.printStackTrace(); 
     } 
    } 
} 
+2

Это не закрывает файл в случае исключения. –

+0

@ TomHawtin-tackline: если мое редактирование одобрено, это –

+1

@JanusTroelsen: Если отклонено, цитируйте [* Заявление о попытках с ресурсами *] (http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html). – trashgod

3

Это лучше, чтобы закрыть писатель/OutputStream в конце концов блок, только в случае, если что-то случится

finally{ 
    if(writer != null){ 
    try{ 
     writer.flush(); 
     writer.close(); 
    } 
    catch(IOException ioe){ 
     ioe.printStackTrace(); 
    } 
    } 
} 
+1

еще лучше: используйте try-with-resources –

+0

Да, @JanusTroelsen прав, лучше использовать Оператор try-with-resources https://docs.oracle.com/javase /tutorial/essential/exceptions/tryResourceClose.html – 2015-06-21 08:11:50

9

Вы можете сделать это :

import java.io.*; 
import java.util.*; 

class WriteText 
{ 
    public static void main(String[] args) 
    { 
     try { 
      String text = "Your sample content to save in a text file."; 
      BufferedWriter out = new BufferedWriter(new FileWriter("sample.txt")); 
      out.write(text); 
      out.close(); 
     } 
     catch (IOException e) 
     { 
      System.out.println("Exception ");  
     } 

     return ; 
    } 
}; 
11

Я предпочитаю полагаться на библиотеки, когда это возможно для такого рода операций. Это делает меня менее вероятным, чтобы случайно опустить важный шаг (например, сделанные выше волчьи нотки). Некоторые библиотеки предлагаются выше, но мой любимый для такого рода вещей - Google Guava.Гуава имеет класс с именем Files, который работает хорошо для этой задачи:

// This is where the file goes. 
File destination = new File("file.txt"); 
// This line isn't needed, but is really useful 
// if you're a beginner and don't know where your file is going to end up. 
System.out.println(destination.getAbsolutePath()); 
try { 
    Files.write(text, destination, Charset.forName("UTF-8")); 
} catch (IOException e) { 
    // Useful error handling here 
} 
+2

Если вы используете Guava, есть также 'Charsets.UTF-8'. – florian

+1

@florian: это 'Charsets.UTF_8' на самом деле –

11

Использование Apache Commons IO API. Его простой

Использование API в качестве

FileUtils.writeStringToFile(new File("FileNameToWrite.txt"), "stringToWrite"); 

Maven зависимостей

<dependency> 
    <groupId>commons-io</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>2.4</version> 
</dependency> 
5

Если вы заботитесь только о подталкивании один блок текста в файл, это приведет к перезаписи его каждый раз.

JFileChooser chooser = new JFileChooser(); 
int returnVal = chooser.showSaveDialog(this); 
if (returnVal == JFileChooser.APPROVE_OPTION) { 
    FileOutputStream stream = null; 
    PrintStream out = null; 
    try { 
     File file = chooser.getSelectedFile(); 
     stream = new FileOutputStream(file); 
     String text = "Your String goes here"; 
     out = new PrintStream(stream); 
     out.print(text);     //This will overwrite existing contents 

    } catch (Exception ex) { 
     //do something 
    } finally { 
     try { 
      if(stream!=null) stream.close(); 
      if(out!=null) out.close(); 
     } catch (Exception ex) { 
      //do something 
     } 
    } 
} 

В этом примере пользователь может выбрать файл с помощью выбора файла.

+0

@ Eric Leschinski: спасибо за то, что вы сделали мой ответ более профессиональным (я также предположил, что это именно то, чего хотел OP, так как это то, что на самом деле требуется большинству людей, просто сбрасывает текст и заменяет его) –

+2

После ответа на исходный вопрос и OP удовлетворен и давно ушел, страницы, подобные этому, служат только полезным артефактом для людей, которые приземляются здесь из поиска Google. Я приземлился на этой странице, чтобы создать мини-текстовое приложение для файла. Поэтому полезно говорить со всей аудиторией, а не с OP после того, как OP движется дальше. –

53

В Java 7 вы можете сделать это:

String content = "Hello File!"; 
String path = "C:/a.txt"; 
Files.write(Paths.get(path), content.getBytes(), StandardOpenOption.CREATE); 

Существует больше информации здесь: http://www.drdobbs.com/jvm/java-se-7-new-file-io/231600403

+6

'content.getBytes()'? Кодирование ??? –

+1

В случае, если кто-то позже подумает, кодировка будет стандартом платформы. –

+3

' content.getBytes (StandardCharsets.UTF_8) 'может использоваться для явного определения кодировки. – John29

10
import java.io.*; 

private void stringToFile(String text, String fileName) 
{ 
try 
{ 
    File file = new File(fileName); 

    // if file doesnt exists, then create it 
    if (! file.exists()) 
    { 
     file.createNewFile(); 
    } 

    FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.write(text); 
    bw.close(); 
    //System.out.println("Done writing to " + fileName); //For testing 
} 
catch(IOException e) 
{ 
System.out.println("Error: " + e); 
e.printStackTrace(); 
} 
} //End method stringToFile 

Вы можете вставить этот метод в классах. Если вы используете этот метод в классе с основным методом, измените этот класс на статический, добавив статическое ключевое слово. В любом случае вам нужно будет импортировать java.io. *, чтобы заставить его работать иначе, File, FileWriter и BufferedWriter не будут распознаны.

0

Вы можете использовать ArrayList, чтобы поместить все содержимое TextArea в пример, и отправить как параметр, вызвав сохранение, поскольку писатель просто написал строковые строки, затем мы используем строку «for», чтобы написать нашу ArrayList, в конце концов, мы будем довольствоваться TextArea в txt-файле. если что-то не имеет смысла, я сожалею, что это переводчик Google, и я, кто не говорит по-английски.

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


частная пустота SaveActionPerformed (java.awt.event.ActionEvent ЭВТ) {

String NameFile = Name.getText(); 
ArrayList<String> Text = new ArrayList<String>(); 

Text.add(TextArea.getText()); 

SaveFile(NameFile, Text); 

}


общественное недействительный SaveFile (имя String, ArrayList < String> сообщений) {

path = "C:\\Users\\Paulo Brito\\Desktop\\" + name + ".txt"; 

File file1 = new File(path); 

try { 

    if (!file1.exists()) { 

     file1.createNewFile(); 
    } 


    File[] files = file1.listFiles(); 


    FileWriter fw = new FileWriter(file1, true); 

    BufferedWriter bw = new BufferedWriter(fw); 

    for (int i = 0; i < message.size(); i++) { 

     bw.write(message.get(i)); 
     bw.newLine(); 
    } 

    bw.close(); 
    fw.close(); 

    FileReader fr = new FileReader(file1); 

    BufferedReader br = new BufferedReader(fr); 

    fw = new FileWriter(file1, true); 

    bw = new BufferedWriter(fw); 

    while (br.ready()) { 

     String line = br.readLine(); 

     System.out.println(line); 

     bw.write(line); 
     bw.newLine(); 

    } 
    br.close(); 
    fr.close(); 

} catch (IOException ex) { 
    ex.printStackTrace(); 
    JOptionPane.showMessageDialog(null, "Error in" + ex);   

}

8

Используйте это, очень читаемый:

import java.nio.file.Files; 
import java.nio.file.Paths; 

Files.write(Paths.get(path), lines.getBytes(), StandardOpenOption.WRITE); 
+0

Это также копия существующего ответа. : c –

+1

извините, но я не изобретал java8, я не единственный, кто использует эту строку. но это не копия из других ответов на тот же вопрос –

8

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

public static void writeToFile(String text, String targetFilePath) throws IOException 
{ 
    Path targetPath = Paths.get(targetFilePath); 
    byte[] bytes = text.getBytes(StandardCharsets.UTF_8); 
    Files.write(targetPath, bytes, StandardOpenOption.CREATE); 
} 
+0

Слово мудрому - это создаст новый файл, если его там нет, но будет перезаписывать символы существующего файла, если он есть. Если новые данные меньше, это означает, что вы, вероятно, создадите поврежденный файл. Спроси меня, как я знаю! –

+0

Хорошо, откуда вы знаете? – ojblass

+0

Просто используйте 'Files.write (targetPath, bytes);' чтобы затем перезаписать файл. Он будет работать, как ожидалось. – BullyWiiPlaza

7

Использование org.apache.commons.io.FileUtils:

FileUtils.writeStringToFile(new File("log.txt"), "my string", Charset.defaultCharset()); 
11

В случае, если вам нужно создать текстовый файл, основанный на одной строке:

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 

public class StringWriteSample { 
    public static void main(String[] args) { 
     String text = "This is text to be saved in file"; 

     try { 
      Files.write(Paths.get("my-file.txt"), text.getBytes()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
0

Я думаю, что лучший способ использует Files.write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options):

String text = "content"; 
Path path = Paths.get("path", "to", "file"); 
Files.write(path, Arrays.asList(text)); 

См javadoc:

Ввод строк текста в файл. Каждая строка представляет собой последовательность символов и составляет , записанную в файл последовательно с каждой строкой, завершенной разделителем линии платформы , как определено системным свойством line.separator. Символы кодируются в байты с использованием указанной кодировки .

Параметр options указывает, как файл создается или открывается. Если параметров нет, этот метод работает так, как если бы присутствовали опции CREATE, TRUNCATE_EXISTING и WRITE. Другими словами, он открывает файл для записи, создавая файл, если он не существует, или изначально обрезает существующий обычный файл до размера 0. Метод гарантирует, что файл будет закрыт, когда все строки будут иметь был написан (или ошибка ввода-вывода или другое исключение времени выполнения). Если происходит ошибка ввода-вывода , это может произойти после создания файла или или после того, как в файл записаны некоторые байты.

Обратите внимание: Я вижу, что люди уже ответили на встроенный Java Files.write, но то, что особенно важно в моем ответе, о котором никто не упоминает, - это перегруженная версия метода, которая берет Iterable of CharSequence (т.е. String) вместо массива byte[], таким образом text.getBytes() не требуется, что немного чище, я думаю.

Смежные вопросы