【问题标题】:Reading a File from Eclipse Src Folder从 Eclipse Src 文件夹中读取文件
【发布时间】:2020-09-15 15:48:13
【问题描述】:

我正在尝试读取位于 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();
    }   
} 

【问题讨论】:

标签: java filereader


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我先列出一些问题:

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

      将 XML 作为应用程序的一部分(资源)。如果提交申请 作为jar,用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();
      }   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 2018-05-13
        • 2019-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多