Answers:
如果仅输出文本,而不是输出任何二进制数据,则可以执行以下操作:
PrintWriter out = new PrintWriter("filename.txt");
然后,将String写入其中,就像写入任何输出流一样:
out.println(text);
与以往一样,您将需要异常处理。out.close()
完成写作后,请务必致电。
如果您使用的是Java 7或更高版本,则可以使用“ try-with-resources语句 ”,该语句将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)
它允许您通过一个方法调用将文本写入文件:
FileUtils.writeStringToFile(new File("test.txt"), "Hello File");
您可能还需要考虑为文件指定编码。
FileUtils.writeStringToFile(new File("test.txt"), "Hello File", forName("UTF-8"));
一个简单的例子:
try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
out.print(text);
}
@Cleanup new FileOutputStream(...)
完成就可以了。
在Java 7中,您可以执行以下操作:
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
content.getBytes(StandardCharsets.UTF_8)
可用于显式定义编码。
只是在我的项目中做了类似的事情。使用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)
{
}
}
.close()
没有抛出异常(至少在Java 7中如此),最后一次trycatch可能是多余的吗?
throw new RuntimeException(e);
使用FileUtils.writeStringToFile()
来自Apache的百科全书IO。无需重新发明这个特殊的轮子。
您可以使用下面的修改代码从处理文本的任何类或函数中写入文件。有人想知道为什么世界上需要一个新的文本编辑器。
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();
}
}
}
在Java 11中,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);
我更喜欢在任何可能的情况下都依赖库来进行此类操作。这使我不太可能意外忽略一个重要步骤(例如上面提到的错误Wolfsnipes)。上面建议了一些库,但是我最喜欢的是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
}
Charsets.UTF-8
。
Charsets.UTF_8
实际上是
Files.asCharSink(file, charset).write(text)
使用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>
如果您需要基于一个字符串创建文本文件:
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();
}
}
}
使用它,它非常可读:
import java.nio.file.Files;
import java.nio.file.Paths;
Files.write(Paths.get(path), lines.getBytes(), StandardOpenOption.WRITE);
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
您可以将此方法插入您的类中。如果要在具有main方法的类中使用此方法,请通过添加静态关键字将此类更改为static。无论哪种方式,都将需要导入java.io. *使其起作用,否则将无法识别File,FileWriter和BufferedWriter。
您可以这样做:
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 ;
}
};
使用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);
}
Files.write(targetPath, bytes);
然后使用覆盖文件即可。它将按预期工作。
如果您只关心将一块文本推入文件,则每次都会覆盖它。
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
}
}
}
此示例使用户可以使用文件选择器选择文件。
最好在finally块中关闭writer / outputstream,以防万一
finally{
if(writer != null){
try{
writer.flush();
writer.close();
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
}
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);
}
}
我认为最好的方法是使用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:
将几行文字写入文件。每行都是一个char序列,并按顺序写入文件,每行由平台的行分隔符终止,如系统属性line.separator所定义。使用指定的字符集将字符编码为字节。
options参数指定如何创建或打开文件。如果不存在任何选项,则此方法就像存在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 pressed
String 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 block
e.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;
}
您可以使用ArrayList作为示例来放置TextArea的所有内容,并通过调用save来作为参数发送,因为编写者刚刚编写了字符串行,然后我们使用“ for”一行一行地最后编写我们的ArrayList我们将在txt文件中使用TextArea内容。如果没有什么意义,对不起,我是google翻译者,我不会说英语。
观看Windows记事本,它并不总是跳行,而是全部显示在一行中,请使用写字板确定。
private void SaveActionPerformed(java.awt.event.ActionEvent evt) {
String NameFile = Name.getText();
ArrayList< String > Text = new ArrayList< String >();
Text.add(TextArea.getText());
SaveFile(NameFile, Text);
}
public void SaveFile(String name, ArrayList< String> message) {
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);
}
}