如何使用Java将String保存到文本文件?

时间:2009-06-27 19:37:28

标签: java file file-io text-files

在Java中,我有一个名为“text”的String变量中的文本字段的文本。

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

24 个答案:

答案 0 :(得分:675)

如果您只是输出文本而不是任何二进制数据,则以下内容将起作用:

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

然后,将String写入其中,就像对任何输出流一样:

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

答案 1 :(得分:229)

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

static void writeStringToFile(File file, String data) 

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

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

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

答案 2 :(得分:86)

查看Java File API

一个简单的例子:

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

答案 3 :(得分:78)

在我的项目中做了类似的事情。使用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)
    {
    }
}

答案 4 :(得分:68)

在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

答案 5 :(得分:59)

使用Apache Commons IO中的FileUtils.writeStringToFile()。无需重新发明这种特殊的轮子。

答案 6 :(得分: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();
        }
    }
}

答案 7 :(得分:12)

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

答案 8 :(得分:11)

Java 11 中,java.nio.file.Files类通过两个新的实用程序方法进行了扩展,以将字符串写入文件中(请参阅JavaDoc herehere)。在最简单的情况下,它现在是单线的:

Files.writeString(Paths.get("some/path"), "some_string");

使用可选的Varargs参数,可以设置其他选项,例如附加到现有文件或自动创建不存在的文件(请参阅JavaDoc here)。

答案 9 :(得分: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();
        }
    }
}

答案 10 :(得分:11)

我更愿意尽可能依赖库来进行此类操作。这使我不太可能意外地省略了一个重要的步骤(如上面的错误狼人)。上面提到了一些库,但我最喜欢的是Google Guava。 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
}

答案 11 :(得分: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

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

答案 12 :(得分:10)

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

答案 13 :(得分:10)

使用它,它非常易读:

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

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

答案 14 :(得分:10)

你可以这样做:

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

答案 15 :(得分:8)

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

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

答案 16 :(得分:6)

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

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

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

答案 17 :(得分:3)

最好在finally块中关闭writer / outputstream,以防万一发生

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

答案 18 :(得分:1)

答案as here基本相同,但易于复制/粘贴,并且可以正常工作;-)

@media screen and (max-width: mobile-width-here) {
    .mobile-only { display: block; }
}

答案 19 :(得分:0)

您可以使用ArrayList将TextArea的所有内容作为例子,并通过调用save作为参数发送,因为编写器只是写了字符串行,然后我们逐行使用“for”来编写我们的ArrayList最后我们将在txt文件中内容TextArea。如果事情没有意义,我很抱歉谷歌翻译和我不会说英语。

观看Windows记事本,它并不总是跳线,并在一行中显示所有内容,使用Wordpad确定。


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&lt; String&gt; 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);        

}

答案 20 :(得分: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

  

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

     

options参数指定如何创建或打开文件。   如果没有选项,那么此方法就像CREATE一样工作   存在TRUNCATE_EXISTING和WRITE选项。换句话说,它   打开文件进行写入,如果文件不存在则创建文件,或者   最初将现有的常规文件截断为0   方法确保所有行都已关闭文件   写入(或抛出I / O错误或其他运行时异常)。如果   发生I / O错误,然后它可能会在文件创建后执行此操作   截断,或在将一些字节写入文件之后。

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

答案 21 :(得分:0)

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

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

    });

答案 22 :(得分:0)

由于在所有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;
}

答案 23 :(得分:0)

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

}