我正在尝试读取一个名为"numbers.txt"的文件,该文件充满了整数(每行一个整数,没有空行)。我想将数字放入一个数组并返回此数组(方法readIntsFromFile
)。无论如何,找不到文件,因此InputStream cls
返回 null。如果我将文件"numbers.txt"放入与类ReadFileInput
相同的文件夹中,它可以工作,但我不知道为什么如果我将"numbers.txt"文件放入资源文件夹中它不起作用。我以为getResourceAsStream()
能做到吗?main 只是创建一个新的类对象并使用参数"numbers.txt"调用类函数,并将结果保存在数组中。
这是带有方法readIntsFromFile
的类:
package impl;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class ReadFileInput {
public int[] readIntsFromFile(String path) {
ArrayList<Integer> arrList = new ArrayList<>();
try {
InputStream cls = ReadFileInput.class.getResourceAsStream(path);
System.out.println("Get Resources as Stream: " + cls);
//Put cls in ArrayList
}
cls.close();
} catch (Exception e) {
System.out.println(e);
}
int[] arr = arrList.stream().mapToInt(Integer::intValue).toArray();
System.out.println(arr);
return arr;
}
}
你知道它是如何工作的吗?
万事如意!
你传递给SomeClass.class.getResource()
的字符串值(当然还有getResourceAsStream
)有两种"模式"。
-
它看起来"相对于一揽子
SomeClass
",这意味着,实际上,如果您要求例如"img/load.png"
,SomeClass
在包com.foo
中,你实际上是在要求"/com/foo/img/load.png"
- 这是相对模式。 -
你想进入绝对模式:你想要提供 JVM 用来加载 SomeClass 代码的
SomeClass.class
文件的"类路径源",然后从那里查找/img/load.png
。换句话说,如果SomeClass
的代码是通过从jar文件条目/com/foo/SomeClass.class
jarfilemyapp.jar
中加载字节码来获得的,则希望通过从jarfilemyapp.jar
加载jar文件条目/img/load.png
来获得数据。你可以这样做 - 只需从斜杠开始。
鉴于您的数字.txt文件似乎在resources
的"根"中,这强烈建议您传递给.getResourceAsStream()
的字符串应该"/numbers.txt"
。请注意前导斜杠。
注意:这不是一条路。..
之类的都不起作用。奇怪的是,com.foo.numbers.txt
如果 jar 文件包含/com/foo/numbers.txt
.