【问题标题】:Read file from a folder inside the project directory从项目目录内的文件夹中读取文件
【发布时间】:2013-05-24 23:44:27
【问题描述】:

在 JSP 项目中 我正在从目录中读取文件。如果我给出完整路径,那么我可以轻松读取文件

BufferedReader br = new BufferedReader(new FileReader("C:\\ProjectFolderName\\files\\BB.key"));

但我不想写完整路径,而是只想给出包含文件的文件夹名称,如下所示。

BufferedReader br = new BufferedReader(new FileReader("\\files\\BB.key"));

如何做到这一点?

String currentDirectory = new File("").getAbsolutePath();
System.out.println(currentDirectory);
BufferedReader br = new BufferedReader(new FileReader(currentDirectory + "\\files\\BB.key"));

我试过上面还是不能从文件中读取

打印行给出以下输出

信息:C:\Program Files\NetBeans 7.3

【问题讨论】:

    标签: java jsp bufferedreader filepath


    【解决方案1】:

    使用

    File file = request.getServletContext().getRealPath("/files/BB.key");
    

    这会将 URL 路径相对(因此为“/”)从 Web 内容目录转换为文件系统文件。

    对于可移植 Web 应用程序,并且知道文件是 Windows Latin-1 格式,明确说明编码,否则将给出主机的默认操作系统编码。

    BufferedReader br = new BufferedReader(new InputStreamReader(
            new FileInputStream(file), "Windows-1252"));
    

    如果文件存储为资源,在/WEB-INF/classes/下你也可以使用

    BufferedReader br = new BufferedReader(new InputStreamReader(
            getClass().getResourceAsStream("/files/BB.key"), "Windows-1252"));
    

    在这种情况下,该文件将位于 /WEB-INF/classes/files/BB.key 下。

    【讨论】:

    • 如果这不是一个 servlet,而只是任何其他 java 类,即没有 getServletContext 方法之类的,我们该怎么办?
    【解决方案2】:

    最好将文件作为类路径资源而不是文件系统资源来读取。这可以帮助您避免硬编码或参数化环境特定文件夹。关注这个帖子Reading file from classpath location for "current project"

    【讨论】:

      【解决方案3】:

      添加这个:

      private static String currentDirectory = new File("").getAbsolutePath();
      

      并将您的 BufferedReader 更改为:

      BufferedReader br = new BufferedReader(new FileReader(currentDirectory + "\\files\\BB.key"));
      

      currentDirectory 将包含项目目录所在的任何路径(运行程序的位置)。

      【讨论】:

        【解决方案4】:

        如果您通过相对路径(new FileReader("files/BB.key"))引用文件,那么在执行程序时它将根据当前工作目录进行解析。

        你到底想达到什么目的?

        如果您想用您的程序打包一个文件,然后以编程方式访问它,请将其放在类路径中并使用 Class.getResource... 方法之一将其作为资源加载。

        【讨论】:

        • 这个想法是我在我的项目文件夹的文件目录中上传一个文件,然后从该上传的文件中读取行
        • 您在运行时或交付项目之前“上传”它并与您的项目一起交付?如果在运行时,你如何“上传”文件,用例是什么?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-20
        • 1970-01-01
        • 2012-11-25
        • 2014-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多