Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从System.out.println写入文件_Java_File_Createfile - Fatal编程技术网

Java 从System.out.println写入文件

Java 从System.out.println写入文件,java,file,createfile,Java,File,Createfile,我已经替换了许多字符串并输出了结果,现在正试图将这些行写入文本文件。这就是我所做的。我创建了一个新文件: File newfile = new File("/Users/Bill/Desktop/newfile.txt"); if (newfile.exists()) { System.out.println("File exists"); } else { newfile.createNewFile(); System.out.p

我已经替换了许多字符串并输出了结果,现在正试图将这些行写入文本文件。这就是我所做的。我创建了一个新文件:

File newfile = new File("/Users/Bill/Desktop/newfile.txt");
    if (newfile.exists()) {
        System.out.println("File exists");
    } else {
        newfile.createNewFile();
        System.out.println("New file created");

    }
    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }
然后我尝试将System.out.println(第[I]行)的结果写入创建的文件

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }
不过,我没有得到我所期望的。有什么建议吗

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }
写入文件:

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }
public class WriteToFile {
private String path;
private boolean append = false;

public WriteToFile(String filename) {
    path=filename;
}

public WriteToFile(String filename, boolean appendfile){
    path=filename;
    append=appendfile;
}

public void write(String text) throws IOException {
    FileWriter filewrite = new FileWriter(path, append);
    PrintWriter print = new PrintWriter(filewrite);

    print.printf("%s" + "%n", text);
    print.close();
}
}

每次调用
WriteToFile.write
,它都会重新打开文件进行写入,截断文件的原始内容。您应该在构造函数中打开该文件一次(并将
PrintWriter
存储在字段中),然后添加一个
close
方法,该方法为
PrintWriter
调用
close

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }
在呼叫端,执行以下操作:

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }
WriteToFile writer = new WriteToFile(filename);
try {
    // writer.write(...);
} finally {
    writer.close();
}

通过在
finally
块中调用
close
,可以确保即使异常导致函数提前退出,文件也已关闭。

查看代码中构造函数的第二个参数

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }
FileWriter filewrite = new FileWriter(path, append);
看,上面写着“追加”。猜猜它是干什么的。如果你不确定,请阅读

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }
现在,看看您是如何初始化
append

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }
private boolean append = false;

此代码的行为完全符合预期。这只是开发人员的错。修复它:)

只需使用该方法在系统上设置文件名
    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }
系统设置(文件名)

    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }

然后,每当我们想使用System.out.println()打印时,它都会直接打印到您提到的文件名。

显然
WriteToFile
不起作用。显示该类的源代码。您需要阅读一本好的Java书籍,例如Core Java。提供堆栈跟踪。不,每次写入都重新打开文件仍然是一个坏主意,即使您以追加模式打开它。(而且,它不可移植。例如,Windows没有附加模式——它是在结束模式下模拟使用的。)仅使用文件名是不起作用的。请参阅本帖:
    try {
    WriteToFile newFile = new WriteToFile(newfile, true);
    newFile.write(lines[i]); 
    // lines[i] is what I used to print out System.out.println(lines[i])  
    }

    catch (IOException e) {
        System.out.println("Error.");
    }