Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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 如何从与项目不同的文件夹中读取文件_Java - Fatal编程技术网

Java 如何从与项目不同的文件夹中读取文件

Java 如何从与项目不同的文件夹中读取文件,java,Java,我正在尝试读取一个名为“levels”的文件夹中的txt文件。如果相关的话,我使用扫描仪的类位于src/anotherPackageName中。当我执行: Scanner s = new Scanner(new File("levels/level0")); //adding .txt doesn't fix 它抛出一个异常。我不想使用绝对路径,而是尽可能使用相对于项目的路径。这是我的文件夹结构: D:\OneDrive\Folder\AnotherFolder\ProjectName Pr

我正在尝试读取一个名为“levels”的文件夹中的txt文件。如果相关的话,我使用扫描仪的类位于
src/anotherPackageName
中。当我执行:

Scanner s = new Scanner(new File("levels/level0")); //adding .txt doesn't fix
它抛出一个异常。我不想使用绝对路径,而是尽可能使用相对于项目的路径。这是我的文件夹结构:

D:\OneDrive\Folder\AnotherFolder\ProjectName

ProjectName
   src
       packageOne
           ClassWhereImUsingScanner
           OtherClasses
       (...)
   levels
       level0
       level1
       (...)

通常路径是相对于您的执行的,但它也取决于您在eclipse上的项目设置,您能发送更多关于您的目录结构的信息吗

根据您的结构,尝试以下方法:

Scanner s = new Scanner(new File("../levels/level0"));
Scanner scanner = new Scanner(
    getClass().getResourceAsStream("/path/to/file.txt"));
FileReader sourceFile = new FileReader("levels/level0.txt");
BufferedReader inStream = new BufferedReader(sourceFile);
String Line = inStream.readLine();

通常路径是相对于您的执行的,但它也取决于您在eclipse上的项目设置,您能发送更多关于您的目录结构的信息吗

根据您的结构,尝试以下方法:

Scanner s = new Scanner(new File("../levels/level0"));
Scanner scanner = new Scanner(
    getClass().getResourceAsStream("/path/to/file.txt"));
FileReader sourceFile = new FileReader("levels/level0.txt");
BufferedReader inStream = new BufferedReader(sourceFile);
String Line = inStream.readLine();

请记住,在大多数Java代码中,项目的最终状态不是从IDE运行的,而是从某些生产系统(例如应用程序或服务器)运行的。在这种情况下,您的开发源代码结构将不可用

在Java中,有两种主要的读取文本文件或其他资源的方法:要么您可以找到实际文件的路径,在这种情况下,您需要处理可能没有耗尽开发源代码树的问题,要么您需要找到一种方法将文本文件捆绑到您的项目中

大多数Java项目最终都会被编译成某种存档,要么是JAR文件,要么是WAR文件(对于web应用程序),要么是Android APK之类的东西。在大多数情况下,您可以将自己的文本文件添加到项目存档中。(例如,在Maven项目中,如果您只是将文本文件放在
src/main/resources
文件夹中,那么它应该包含在已编译的JAR中。)

但是,在这种情况下,文本文件不再是磁盘上的单独文件,而是存档中的一个数据块。您可以解压归档文件以获得实际的
文件
对象,但如果您实际上只需要读取字节,那么这是浪费

因此,读取此类文本文件的最常见方式是使用现有的
类加载器
机制,即从磁盘(或从存档文件,或通过网络或其他方式)读取
.class
文件。
ClassLoader
已经知道如何加载编译代码旁边的字节,因此您可以利用这些字节

在您的情况下,您应该能够执行以下操作:

Scanner s = new Scanner(new File("../levels/level0"));
Scanner scanner = new Scanner(
    getClass().getResourceAsStream("/path/to/file.txt"));
FileReader sourceFile = new FileReader("levels/level0.txt");
BufferedReader inStream = new BufferedReader(sourceFile);
String Line = inStream.readLine();
在本例中,
/path/to/file.txt
路径是相对于类的加载路径。例如,如果您的类名为
my.package.Foo
,那么实际的类字节将位于名为
my/package/Foo.class
的文件夹(文件系统文件夹或JAR文件或其他文件)中——在这种情况下,
路径/to/file.txt
my/package/Foo.class
将相对于同一根


请参阅以获取更多信息。

请记住,在大多数Java代码中,项目的最终状态不是从IDE运行的,而是从某些生产系统(例如应用程序或服务器)运行的。在这种情况下,您的开发源代码结构将不可用

在Java中,有两种主要的读取文本文件或其他资源的方法:要么您可以找到实际文件的路径,在这种情况下,您需要处理可能没有耗尽开发源代码树的问题,要么您需要找到一种方法将文本文件捆绑到您的项目中

大多数Java项目最终都会被编译成某种存档,要么是JAR文件,要么是WAR文件(对于web应用程序),要么是Android APK之类的东西。在大多数情况下,您可以将自己的文本文件添加到项目存档中。(例如,在Maven项目中,如果您只是将文本文件放在
src/main/resources
文件夹中,那么它应该包含在已编译的JAR中。)

但是,在这种情况下,文本文件不再是磁盘上的单独文件,而是存档中的一个数据块。您可以解压归档文件以获得实际的
文件
对象,但如果您实际上只需要读取字节,那么这是浪费

因此,读取此类文本文件的最常见方式是使用现有的
类加载器
机制,即从磁盘(或从存档文件,或通过网络或其他方式)读取
.class
文件。
ClassLoader
已经知道如何加载编译代码旁边的字节,因此您可以利用这些字节

在您的情况下,您应该能够执行以下操作:

Scanner s = new Scanner(new File("../levels/level0"));
Scanner scanner = new Scanner(
    getClass().getResourceAsStream("/path/to/file.txt"));
FileReader sourceFile = new FileReader("levels/level0.txt");
BufferedReader inStream = new BufferedReader(sourceFile);
String Line = inStream.readLine();
在本例中,
/path/to/file.txt
路径是相对于类的加载路径。例如,如果您的类名为
my.package.Foo
,那么实际的类字节将位于名为
my/package/Foo.class
的文件夹(文件系统文件夹或JAR文件或其他文件)中——在这种情况下,
路径/to/file.txt
my/package/Foo.class
将相对于同一根


有关更多信息,请参阅。

因此,要访问文件,您可以执行以下操作:

Scanner s = new Scanner(new File("../levels/level0"));
Scanner scanner = new Scanner(
    getClass().getResourceAsStream("/path/to/file.txt"));
FileReader sourceFile = new FileReader("levels/level0.txt");
BufferedReader inStream = new BufferedReader(sourceFile);
String Line = inStream.readLine();
然后,您可以根据数据和存储方式使用标记器


您可以看到以下示例:

因此,为了访问文件,您可以执行以下操作:

Scanner s = new Scanner(new File("../levels/level0"));
Scanner scanner = new Scanner(
    getClass().getResourceAsStream("/path/to/file.txt"));
FileReader sourceFile = new FileReader("levels/level0.txt");
BufferedReader inStream = new BufferedReader(sourceFile);
String Line = inStream.readLine();
然后,您可以根据数据和存储方式使用标记器

您可以看到以下示例: