从Eclipse Src文件夹读取文件

时间:2020-09-15 15:48:13

标签: java filereader

我正在尝试读取一个位于eclipse src文件夹中的文件,但是一直找不到该文件。

public static void main(String[] args) {
    try {
        File file = new File("/PMIS/src/config/PMIS_Request_Template.xml");
        FileReader fr = new FileReader(file);
        
        BufferedReader br = new BufferedReader(fr);
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();
        
        while(line != null) {
            sb.append(line);
            sb.append("\n");
        }
        fr.close();
    } catch (Exception ex) {
        ex.printStackTrace();
    }   
} 

enter image description here

3 个答案:

答案 0 :(得分:0)

以斜杠开头的路径表示绝对路径,因此在Windows下,该目录类似于名为PMIS的驱动器,而在Linux下,则是已挂载文件系统中具有该名称的基本文件夹。 实际上,您想打开一个相对于您的工作目录的文件,因此必须以./PMIS/src/config/PMIS_Request_Template.xml(开头的点表示当前工作目录)或PMIS/src/config/PMIS_Request_Template.xml(不带前导)开头。削减)。 除此之外,您还想验证当前的工作目录是否与您期望的一样(即eclipse文件夹)。例如,您可以在this way中找到它。相应地调整路径,或者更好地调整路径,使其灵活并允许从args移交,因此启动此程序的人员可以指定相对位置或绝对位置。

使用maven时的侧节点:如果要静态保存此文件,则应将其放入与resources文件夹相同级别的src文件夹中,因为其中不包含该文件Java源代码。然后使用Maven资源加载逻辑-例如,检出this thread

而且,Maven的标准文件夹结构有些不同。因此,如果您没有手动修改这些设置,则应解决此问题:将src移至main/src并将资源文件移至main/resources,否则以后会遇到麻烦。

答案 1 :(得分:0)

/PMIS/src/config/PMIS_Request_Template.xml 将此行替换为: //PMIS//src//config//PMIS_Request_Template.xml

答案 2 :(得分:0)

我首先列出一些问题:

  • File file = new File("/PMIS/src/config/PMIS_Request_Template.xml"); 该文件可以与类一起驻留,如类路径上的 resource 。 然后它不是文件(磁盘系统文件),而是可能在应用程序jar中。现在它可能仅适用于IDE,因为src用于源代码。
  • FileReader fr =新的FileReader(文件); FileReader是一个旧的实用程序类,它使用默认的平台编码, 因此,这可能因用户而异,这对于您传递的XML是完全错误的。
  • while(line != null) { ... } 缺少br.readLine();

将XML放置在应用程序的一部分(资源)中。如果应用程序已交付 作为罐子,用7zip等打开它,然后检查路径。

try {
    URL xmlURL = YourClass.class.getResource("/config/PMIS_Request_Template.xml");
    // xmlURL will be null when the path is incorrect.
    Path path = Paths.get(xmlURL.toURI());
    byte[] xmlBytes = Files.readAllBytes(path);
    String xml = new String(xmlBytes, StandardCharsets.UTF_8);
} catch (Exception ex) {
    ex.printStackTrace();
}   
相关问题