Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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_File Io_Filepath_Readxml_File Location - Fatal编程技术网

Java的文件路径或文件位置-新文件()

Java的文件路径或文件位置-新文件(),java,file-io,filepath,readxml,file-location,Java,File Io,Filepath,Readxml,File Location,我的项目有以下结构 在Eclipse中: myPorjectName src com.example.myproject a.java com.example.myproject.data b.xml 在a.java中,我想读取b.xml文件。我该怎么做?具体来说,在a.java中,我使用了以下代码: DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newIn

我的项目有以下结构

在Eclipse中:

myPorjectName
  src
    com.example.myproject
        a.java
    com.example.myproject.data
        b.xml
a.java
中,我想读取
b.xml
文件。我该怎么做?具体来说,在
a.java
中,我使用了以下代码:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("data/b.xml"));
此代码找不到
b.xml
。但是,如果我将路径更改为
src/com/example/myproject/data/b.xml
,那么它就可以工作了。当前位置似乎位于我的项目文件的根目录中


但是我看到了其他人的例子,如果
b.xml
a.java
在同一个文件夹中,那么我们可以直接使用
新文件(“b.xml”)
但是我尝试将
b.xml
放在
a.java
的同一文件夹中,而不是放在子文件夹中,但是仍然不起作用。如果这样做有效,那么在我的例子中,我应该能够使用
新文件(“data/b.xml”)
,对吗?我真的不明白为什么这不起作用。

如果它已经在类路径中并且在同一个包中,请使用

URL url = getClass().getResource("b.xml");
File file = new File(url.getPath());
或者,将其读取为
输入流

InputStream input = getClass().getResourceAsStream("b.xml");
静态方法中,可以使用

InputStream in = YourClass.class.getResourceAsStream("b.xml");
如果您的文件与试图从中访问文件的类不在同一个包中,则必须以
'/'
开头为其指定相对路径

ex : InputStream input = getClass().getResourceAsStream
           ("/resources/somex.cfg.xml");which is in another jar resource folder

它很可能更像
getClass().getResourceAsInputStream(“/com/example/myproject/data/b.xml”)它不起作用,因为您的默认目录(java从中执行)是
myPorjectName
它不在
myproject
xagyg和MadProgrammer的注释让我明白了为什么我做得不对。谢谢你们。下面的答案让我学到了更多。我认为这是最好的方法!如果它不在同一个包中怎么办?在我的示例中,a.java位于com.example.myproject中。b、 xml位于com.example.myproject.data中。@user1387727使用完全限定路径ie
“/com/example/myproject/data/b.xml”
。。在我的例子中,我试图使用URL URL=getClass().getResource(“b.xml”)读取xml文件;Document doc=docBuilder.parse(新文件(url.getPath());假设a.java和b.xml在同一个文件夹中。它不起作用。我打印出url.getPath(),发现路径从/c:/…/…/…/../myproject/bin/com/../b.xml开始。实际上,代码:docBuilder.parse(新文件(url.getPath())不喜欢完整的文件路径。如果我手动键入文件路径:docBuilder.parse(新文件(“bin/com/./../b.xml”)),那么它可以工作。你知道我可以做什么来代替手动输入文件路径吗?第一个路径只有在JAR或WAR文件被分解的情况下才能工作,或者第一个路径没有,只有.class文件的目录系统。