使用包路径的FileInputStream

4

我正在尝试读取一个文件,例如:

FileInputStream fileInputStream = new FileInputStream("/com/test/Test.xml");

我一直遇到文件未找到的异常。如何让它正常工作?输入流会采用相对路径吗?

4个回答

7
是的,可以使用相对路径。
为什么你的表达式不起作用?非常简单:你的路径/com/test/Test.xml是绝对路径,因为它以/开头,所以你实际上是在寻找从根目录开始位于/com/test/目录中的文件。
如何解决这个问题?
我相信你正在尝试找到位于项目下的文件。所以,你可以使用相对路径,比如./com/test/Test.xmlcom/test/Test.xml。这可能有所帮助。可能是因为我不知道你当前的工作目录和文件结构。你运行java时所在的目录就是你当前的目录。如果你是从IDE运行的,通常工作目录就是你的项目目录。
在这种情况下,我认为路径./com/test/Test.xml是无效的,因为文件Test.xml并不直接位于项目根目录下,而是位于./src/resources/com/test之类的地方。
在这种情况下,你可能不想将文件读取为文件,而是将其作为资源(位于你的类路径中)。在这种情况下,请使用 getClass().getResourceAsStream("/com/test/Test.xml")

4

尝试使用 class.getResourceAsStream(path) 方法。在这种情况下,路径必须相对于调用此语句的类所在的文件夹。

InputStream in = getClass().getResourceAsStream("/com/test/Test.xml");

0

试试这个,

String str = "Test.xml";
  File file = new File(str);
  String absolutePathOfFirstFile = file.getAbsolutePath();
  FileInputStream fileInputStream = new FileInputStream(absolutePathOfFirstFile);

以上的回答是非常好的解释。请阅读那个。 - Krishna

0

你的路径可能不正确。你可以通过使用System.getProperty("user.dir");或打印new File(".")的路径来检查当前目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接