Java 如何确定使用PrintWriter打开文件的正确路径?

Java 如何确定使用PrintWriter打开文件的正确路径?,java,file,printwriter,Java,File,Printwriter,创建PrinterWriter对象时: 当编译器查找文件名时,它在哪里查找?例如,在Eclipse中,我在Arrays/src/ArraysAndFiles.java中工作。在本例中,我试图打开Values.txt。我在src目录中创建了这个文件,因为ArraysAndFiles.java存储在这个目录中。当我尝试用以下代码打开文件时,我得到一个FileNotFoundException: Values.txt的正确路径是什么?在您的示例中,Values.txt是一个相对路径。它是相对于您的工作

创建PrinterWriter对象时:

当编译器查找文件名时,它在哪里查找?例如,在Eclipse中,我在Arrays/src/ArraysAndFiles.java中工作。在本例中,我试图打开Values.txt。我在src目录中创建了这个文件,因为ArraysAndFiles.java存储在这个目录中。当我尝试用以下代码打开文件时,我得到一个FileNotFoundException:


Values.txt的正确路径是什么?

在您的示例中,Values.txt是一个相对路径。它是相对于您的工作目录的。 通常它与JAR文件所在的目录相同

在Eclipse中,应用程序构建在“bin”文件夹中。在您的情况下,它是Arrays\bin\。这是应用程序的工作目录,您的文件必须在那里

如果希望Eclipse在构建过程中导出此文件,请执行以下操作:

右键单击文件->构建路径->添加到构建路径

建议将解决方案1用于小文件,但您也可以在其他计算机中找到该文件:

解决方案2:使用FileString父、字符串子构造函数逐步构建路径。例如:

File desktop = new File(System.getProperty("user.home"),"Desktop");
File textsFolder = new File(desktop,"texts");
File testsFolder = new File(textsFolder,"tests");
File peopleTxt = new File(testsFolder,"people,txt");
这等于:C://Users//George//Desktop//text//tests//people.txt Windows操作系统。

根据代码

PrintWriter outputFile=新的PrintWriterValues.txt

如果将Values.txt放在当前/project目录(即Arrays文件夹)中,它应该可以工作,但有上述注释中提到的限制,例如写入作为JarFile一部分的文件


根据您的目的,您应该采取行动。

当您将其在操作系统文件系统中查看的路径传递给PrintWriter时,您可以右键单击文件以查看其完整路径并将其传递给PrintWriter。然而,当你JAR你的代码时,你将不能准确地写入运行JAR中的文件。这是一个问题,您的实际目标是什么,以便有人可以帮助您实现?打开文件的另一种方法是使用JFileChooser,让用户为您选择文件。将文件放在项目目录/Arrays中。@xtratic我从Java开始读,只是想接着读一个使用数组和文件的例子。我不确定这个例子需要什么,你的目标是什么?如果您不关心代码在出现异常时是否正常工作,而这只是一个实验,那么只需根据操作系统文件系统将路径更正为完整路径,例如C:\…\…\…\Arrays\src\Values.txt。
import java.io.PrintWriter;

public class ArraysAndFiles {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        PrintWriter outputFile = new PrintWriter("Values.txt");

    }
}
File desktop = new File(System.getProperty("user.home"),"Desktop");
File textsFolder = new File(desktop,"texts");
File testsFolder = new File(textsFolder,"tests");
File peopleTxt = new File(testsFolder,"people,txt");