57

我正在尝试为我正在制作的一个小程序理解 PrintWriter,但我似乎无法让 java 制作文件然后在其上写入。当我执行下面的程序时,它在第 9 行给我一个 Filenotfoundexeption 错误。它也无法在我指定的目录中创建文件。我是新手,所以请尽量保持答案简单。我正在使用 Eclipse。

import java.io.PrintWriter;
import java.io.File;

public class Testing {

  public static void main(String[] args) {

    File file = new File ("C:/Users/Me/Desktop/directory/file.txt");
    PrintWriter printWriter = new PrintWriter ("file.txt");
    printWriter.println ("hello");
    printWriter.close ();       
  }
}
4

11 回答 11

75

如果该目录不存在,则需要创建它。Java 不会自己创建它,因为File该类只是指向一个根本不存在的实体的链接。

正如您所说,错误是无法创建文件。如果您阅读 PrintWriter 构造函数的文档,您可以看到

FileNotFoundException - 如果给定的字符串不表示现有的、可写的常规文件并且无法创建该名称的新常规文件,或者在打开或创建文件时出现其他错误

您应该尝试为其之前包含的文件夹创建路径:

File file = new File("C:/Users/Me/Desktop/directory/file.txt");
file.getParentFile().mkdirs();

PrintWriter printWriter = new PrintWriter(file);
于 2012-07-16T00:11:08.927 回答
12
import java.io.PrintWriter;
import java.io.File;

public class Testing {

  public static void main(String[] args) throws IOException {

    File file = new File ("C:/Users/Me/Desktop/directory/file.txt");
    PrintWriter printWriter = new PrintWriter ("file.txt");
    printWriter.println ("hello");
    printWriter.close ();       
  }
}

throw an exception for the file.

于 2012-10-09T05:03:34.430 回答
5

将 File 对象传递给构造函数PrintWriter(File file)

PrintWriter printWriter = new PrintWriter(file);
于 2012-07-16T00:10:32.993 回答
4
import java.io.File;
import java.io.PrintWriter;

public class Testing 
{
    public static void main(String[] args) 
    {

        File file = new File("C:/Users/Me/Desktop/directory/file.txt");

        PrintWriter printWriter = null;

        try
        {
            printWriter = new PrintWriter(file);
            printWriter.println("hello");
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if ( printWriter != null ) 
            {
                printWriter.close();
            }
        }
    }
}
于 2012-07-16T00:17:15.147 回答
1

Java 通常不接受“/”来定义文件目录,所以试试这个:

 File file = new File ("C:\\Users\\user\\workspace\\FileTester\\myFile.txt");

如果文件不存在,请执行以下操作:

 try {
      file.createNewFile();
 }
 catch (IOException e) {
 e.printStackTrace();
 }
于 2013-02-08T21:49:18.110 回答
1

您应该对 java 中的异常有一个清晰的认识。在java中有已检查异常和未检查异常。

编译器在编译时检查已检查的异常(不抛出,只是检查),以便在运行时顺利执行程序。

注意:在我们的程序中,如果有可能出现检查异常,那么我们应该通过 try catch 或 throws 关键字来处理检查异常。否则我们将得到一个编译时错误:

CE:Unexpected Exception java.io.FileNotFoundException;必须被捕获或声明被抛出。

如何解决: 1.将您的代码放入 try catch 块中:

2.使用 throws 关键字,如上面其他人所示。

建议:阅读有关异常的更多信息。(我个人喜欢这个话题)

于 2016-10-21T06:29:08.983 回答
0
import java.io.*;

public class test{
    public static void main(Strings []args){

       PrintWriter pw = new PrintWriter(new file("C:/Users/Me/Desktop/directory/file.txt"));

       pw.println("hello");
       pw.close
    }

}

于 2013-11-16T22:09:51.990 回答
0

该类PrintWriter实际上可以为您创建文件。

此示例适用于 JDK 1.7+。

// This will create the file.txt in your working directory.

PrintWriter printWriter = null;

try {

    printWriter = new PrintWriter("file.txt", "UTF-8");
    // The second parameter determines the encoding. It can be
    // any valid encoding, but I used UTF-8 as an example.

} catch (FileNotFoundException | UnsupportedEncodingException error) {
    error.printStackTrace();
}

printWriter.println("Write whatever you like in your file.txt");

// Make sure to close the printWriter object otherwise nothing
// will be written to your file.txt and it will be blank.
printWriter.close();

有关有效编码的列表,请参阅文档。

或者,您可以只将文件路径传递给PrintWriter类而不声明编码。

于 2015-02-24T17:20:59.287 回答
0

好吧,我认为首先将整个 main 保留在 try catch 中(或者您可以使用 as public static void main(String arg[]) throws IOException ),然后也使用您正在编写的文件的完整路径作为

PrintWriter printWriter = new PrintWriter ("C:/Users/Me/Desktop/directory/file.txt");

所有那些像用户,我,桌面,目录这样的目录都应该是用户制作的。java不会让目录拥有自己的。它应该是

import java.io.*;
public class PrintWriterClass {

public static void main(String arg[]) throws IOException{
    PrintWriter pw = new PrintWriter("C:/Users/Me/Desktop/directory/file.txt");
    pw.println("hiiiiiii");
    pw.close();
}   

}
于 2013-03-13T04:51:03.030 回答
0

双击file.txt,然后保存它,command + s,这在我的情况下有效。另外,请确保将file.txt其保存在项目文件夹中。如果这不起作用。

PrintWriter pw = new PrintWriter(new File("file.txt"));
pw.println("hello world"); // to test if it works.
于 2017-10-05T16:51:10.193 回答
0

如果你想使用 PrintWrite 然后试试这个代码

public class PrintWriter {
    public static void main(String[] args) throws IOException {

        java.io.PrintWriter pw=new java.io.PrintWriter("file.txt");
        pw.println("hello world");
        pw.flush();
        pw.close();

    }

}
于 2018-12-28T09:41:23.730 回答