如何使用Java将字符串保存到文本文件?

在Java中,我在名为“text”的String变量中包含来自文本字段的文本。

如何将“text”变量的内容保存到文件中?

1368516 次浏览

看看Java文件API

一个简单的例子:

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

使用Apache Commons IO中的FileUtils.writeStringToFile()。不需要重新发明这个特定的轮子。

刚刚在我的项目中做了类似的事情。使用FileWriter将简化您的部分工作。在这里您可以找到不错的教程

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){}}

如果您只是输出文本,而不是任何二进制数据,以下操作将有效:

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

然后,将你的String写入它,就像你对任何输出流一样:

out.println(text);

您将一如既往地需要异常处理。写完后一定要调用out.close()

如果您使用Java7或更高版本,您可以使用“使用资源尝试语句”,它会在您完成后自动关闭您的PrintStream(即退出块),如下所示:

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

您仍然需要像以前一样显式抛出java.io.FileNotFoundException

Apache Commons IO包含一些很好的方法来做到这一点,特别是FileUtils包含以下方法:

static void writeStringToFile(File file, String data, Charset charset)

它允许您在一个方法调用中将文本写入文件:

FileUtils.writeStringToFile(new File("test.txt"), "Hello File", Charset.forName("UTF-8"));

您可能还需要考虑指定文件的编码。

您可以使用修改下面的代码从处理文本的任何类或函数编写文件。人们想知道为什么世界需要一个新的文本编辑器…

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 exceptioniox.printStackTrace();}}}

最好是在最后一个块中关闭写入器/输出流,以防万一发生什么事情

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

你可以这样做:

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 ;}};

对于这种操作,我更喜欢尽可能地依赖库。这使我不太可能意外地省略重要步骤(比如上面犯的错误)。上面建议了一些库,但我最喜欢的是googleguava。Guava有一个名为文件的类,它非常适合这项任务:

// 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}

使用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>

如果您只关心将一个文本块推送到文件,则每次都会覆盖它。

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}}}

此示例允许用户使用文件选择器选择文件。

在Java7中,你可以这样做:

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

这里有更多的信息:http://www.drdobbs.com/jvm/java-se-7-new-file-io/231600403

import java.io.*;
private void stringToFile( String text, String fileName ){try{File file = new File( fileName );
// if file doesnt exists, then create itif ( ! 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

您可以将此方法插入到您的类中。如果您在带有main方法的类中使用此方法,请通过添加静态关键字将此类更改为静态。无论哪种方式,您都需要导入java.io.*才能使其工作,否则File、FileWriter和BufferedWriter将无法识别。

使用这个,它非常具有可读性:

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

使用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);}

使用org.apache.commons.io.FileUtils:

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

如果您需要基于一个字符串创建文本文件:

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();}}}

我认为最好的方法是使用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

将文本行写入文件。每行都是一个字符序列,并且是按顺序写入文件,每行以平台的行分隔符,由system属性定义line.separator.字符被编码成字节使用指定的字符集。

选项参数指定如何创建或打开文件。如果不存在任何选项,则此方法的工作方式与CREATE一样,TRUNCATE_EXISTING,并且存在WRITE选项。换句话说,它打开文件进行写入,如果文件不存在则创建文件,或最初将现有常规文件截断为0的大小。这方法确保文件在所有行都被关闭时关闭写入(或抛出I/O错误或其他运行时异常)。如果I/O错误发生,然后它可能会在文件创建或截断,或在某些字节写入文件后。

请注意。我看到人们已经回答了Java的内置Files.write,但是我的回答中没有人提到的特别之处是该方法的重载版本,它采用了CharSequence的Iterable(即String),而不是byte[]数组,因此text.getBytes()不是必需的,我认为这有点干净。

如果您希望将字符串中的回车字符保留到文件中下面是一个代码示例:

    jLabel1 = new JLabel("Enter SQL Statements or SQL Commands:");orderButton = new JButton("Execute");textArea = new JTextArea();...

// String captured from JTextArea()orderButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent ae) {// When Execute button is pressedString tempQuery = textArea.getText();tempQuery = tempQuery.replaceAll("\n", "\r\n");try (PrintStream out = new PrintStream(new FileOutputStream("C:/Temp/tempQuery.sql"))) {out.print(tempQuery);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(tempQuery);}
});

我的方式是基于流,由于在所有Android版本上运行,需要大量资源,如URL/URI,欢迎任何建议。

就目前而言,流(InputStream和OutputStream)传输二进制数据,当开发人员将字符串写入流时,必须首先将其转换为字节,或者换句话说对其进行编码。

public boolean writeStringToFile(File file, String string, Charset charset) {if (file == null) return false;if (string == null) return false;return writeBytesToFile(file, string.getBytes((charset == null) ? DEFAULT_CHARSET:charset));}
public boolean writeBytesToFile(File file, byte[] data) {if (file == null) return false;if (data == null) return false;FileOutputStream fos;BufferedOutputStream bos;try {fos = new FileOutputStream(file);bos = new BufferedOutputStream(fos);bos.write(data, 0, data.length);bos.flush();bos.close();fos.close();} catch (IOException e) {e.printStackTrace();Logger.e("!!! IOException");return false;}return true;}

Java11中,java.nio.file.Files类通过两个新的实用程序方法扩展,以将字符串写入文件。第一种方法(参见JavaDoc这里)默认使用字符集UTF-8

Files.writeString(Path.of("my", "path"), "My String");

第二种方法(参见JavaDoc这里)允许指定单个字符集:

Files.writeString(Path.of("my", "path"), "My String", StandardCharset.ISO_8859_1);

这两种方法都有一个可选的Varargs参数来设置文件处理选项(请参阅JavaDoc这里)。以下示例将创建一个不存在的文件或将字符串附加到现有文件:

Files.writeString(Path.of("my", "path"), "String to append", StandardOpenOption.CREATE, StandardOpenOption.APPEND);
private static void generateFile(String stringToWrite, String outputFile) {try {FileWriter writer = new FileWriter(outputFile);writer.append(stringToWrite);writer.flush();writer.close();log.debug("New File is generated ==>"+outputFile);} catch (Exception exp) {log.error("Exception in generateFile ", exp);}}

基本上相同的答案就像这里,但容易复制/粘贴,它只是工作;-)

  import java.io.FileWriter;
public void saveToFile(String data, String filename) {try (FileWriter fw = new FileWriter(filename)) {fw.write(data);} catch (Exception e) {throw new RuntimeException(e);}}

我发布了一个保存文件的库,并且只用一行代码处理所有内容,您可以在这里找到它及其留档

Github仓库

你问题的答案很简单

String path = FileSaver.get().save(string.getBytes(),"file.txt");