Java Eclipse无法找到文件--FileNotFoundException关于文件对象的用法

Java Eclipse无法找到文件--FileNotFoundException关于文件对象的用法,java,file,filenotfoundexception,Java,File,Filenotfoundexception,当我尝试使用Eclipse访问Java中的文件对象时,每当访问该文件时,系统都会发送一个FileNotFoundException。我已经手动创建了该文件,并将其放置在Eclipse的文件浏览器中。文件确实有内容,所以问题不在于它是空的。我正在用初始化文件 File file = new File(this.getClass().getResource("save.txt").toString()); 并使用 PrintWriter p = new PrintWriter(file); 这会

当我尝试使用Eclipse访问Java中的文件对象时,每当访问该文件时,系统都会发送一个FileNotFoundException。我已经手动创建了该文件,并将其放置在Eclipse的文件浏览器中。文件确实有内容,所以问题不在于它是空的。我正在用初始化文件

File file = new File(this.getClass().getResource("save.txt").toString());
并使用

PrintWriter p = new PrintWriter(file);
这会发送错误。stacktrace除了创建该类的初始化路径外,不会返回任何内容。例外是

java.io.FileNotFoundException: file:\C:\Users\Nathaniel\Downloads\ERPGE-Global%20Equestria%20Workspace\Swarm\bin\main\save.txt (The filename, directory name, or volume label syntax is incorrect)

导致此错误的原因是什么?如何修复此错误?

提供文件的实际路径并获取文件对象。那你就可以用了

File file = new File("C:\Users\Nathaniel\Downloads\save.txt");
PrintWriter p = new PrintWriter(file);
编辑:

外部化文件名:

在外部文件夹/包中创建属性文件filedetails.properties

fileName=C:\Users\Nathaniel\Downloads\save.txt
访问资源包

ResourceBundle b=ResourceBundle.getBundle("external.filedetails") ;
String fileName=b.getString("fileName");
File file=new File(fileName);

您需要确保资源包含在项目的生成路径中

您可以通过以下两种方式之一执行此操作:

  • 将其放入文件夹(例如“res”),然后将该文件夹添加到生成路径。这样,文件夹中的所有文件都将添加到生成路径中
  • 把它放在你的源文件夹中。请注意,如果将其放在包文件夹中,则需要包含该文件夹的相对路径(请参见下文)
  • 就我个人而言,我更喜欢选项1

    编辑:您可能会发现,拥有res文件夹的子目录也很有用。如果您有一个文件,如res/images/button.png,并且已将res文件夹添加到构建路径,则需要使用字符串“images/button.png”访问该文件


    编辑2:修复了一些误导性信息。

    文件需要放在父项目文件夹中,而不是源文件夹中。如果创建的文件没有指定的文件路径,则将在此处存储该文件。

    我正在尝试将其作为一个可移植的应用程序--它用于多个平台,因此静态路径是不够的。除非我有误解,否则这个.getClass().getResource()会返回所列位置的资源路径,对吗?它适用于图像,因此我认为文本文件也是如此。便携式应用程序首先不使用
    文件
    抽象。这就是classloader的资源机制的作用。您可以使用属性文件将文件名外部化,并在运行时获取它。因此,每个平台都有自己的价值。如果没有直接指向属性文件的路径,我如何获取属性文件以列出路径?@Baqueta,@Passage首先,您必须完成基本操作。我的意思是,如果程序是在静态路径上工作的,你可以很容易地将它转换成动态路径。你的路径中有空格吗?如果是这样的话,那么在没有空格的路径上访问是否也会失败?我打赌你的路径不正确。尝试使用
    System.out.println(file.getAbsolutePath())打印文件路径我已经设法想出了某种解决方案。我将在用户保存文件时提示用户输入文件的路径。这里的任何建议似乎都不起作用,因此这是我能做的最好的事情。将文件添加到生成路径后,我开始收到错误,指出选择不包含主类型,这似乎是随机的。我的错,如果单独添加文件,它们会被添加为库。将编辑以修复。