【问题标题】:Working with filepath in Java Code在 Java 代码中使用文件路径
【发布时间】:2010-11-02 17:39:18
【问题描述】:

我参考了这个example 并创建了一个servlet 应用程序。

它与代码中提到的 TMP_DIR 和 DEST_DIR 路径完美配合(我在 C 驱动器中创建了一个名为 tmp 的文件夹,并且我还在我的应用程序文件夹中创建了一个名为 files 的文件夹。

现在我将代码转移到一台 linux 机器上,这不起作用,因为那里没有名为 C: 的驱动器。我尝试将代码的c:\\tmp 替换为/tmp(并在我的应用程序文件夹中创建了一个文件夹tmp)。但它不起作用。如何使此代码通用?请指教。

【问题讨论】:

标签: java servlets filepath


【解决方案1】:

如果您想要的是一个临时目录,请使用 http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html 并查找 getTempDirectory()。这应该可以在任何地方使用

所以你需要系统提供的系统临时目录。您可以通过它的路径或通过实际的文件来获得它。 (IOUtils 提供了这两种方法)。这是 IOUtil 文档: 获取临时目录

public static File getTempDirectory()

    Returns a File representing the system temporary directory.

    Returns:
        the system temporary directory.

所以如果你写:

File myTempFile = IOUtils.getTempDirectory();

那么 myTempFile 将是您要写入的位置。

如果某些应用程序按名称要求目录,那么您可以使用 getTempDirectoryPath() 这将给出路径名。

在你的例子中我会写:

private static final String TMP_DIR_PATH = IOUtils.getTempDirectoryPath();

或使用@dogbane 的方法:

private static final String TMP_DIR_PATH = System.getProperty("java.io.tmpdir");

我希望他们给出相同的答案。

如果您仍然感到困惑,请继续询问 - 这就是 SO 的用途!

更新:如果您对文件进行任何操作,那么熟悉 Apache 的 FileUtils 和 IOUtils 是值得的。有几件事 JDK 做得不好或自然而然,Apache 提供了更好的支持。

【讨论】:

  • 我对如何在我提到的示例中使用这个 getTempDirectory() 感到非常困惑。你能解释一下吗?我是java初学者...
  • Readcsv.java:29: cannot find symbol symbol : variable IOUtils location: class Readcsv 将 IOUtils.getTempDirectoryPath() 添加到源代码时出现此错误..
  • 您需要从 Apache 加载 IOUtils 类库(请参阅commons.apache.org/io 并使用下载)。这应该会给你一个放在类路径中的 jar。在开发过程中尝试引入 Maven,因为它会处理这些依赖项。
  • @peter.murray.rust 我尝试了 dogbane 的方法,它在 Windows 中运行良好。但是我在linux中有一些问题。请在他的回答中浏览我的 cmets。
  • 可以简单使用JDK的File.createTempFile(),为什么还要使用外部库IOUtils?
【解决方案2】:

用于保存临时文件的平台特定目录的位置由属性java.io.tmpdir 定义。

所以在你的代码中你可以使用:

private static final String TMP_DIR_PATH = System.getProperty("java.io.tmpdir")

【讨论】:

  • 我的实际任务是读取 csv 文件中的内容并将其添加到数据库中。当我使用您的代码时,此任务在 Windows 系统中完美完成。但是当使用linux服务器时,csv文件没有被正确读取,结果是0 items has been added in ur database
  • 另一个信息:我正在使用 Windows 机器上的 linux 服务器。在浏览器中使用 http://192.168.0.85:8080/Readcsv/uploadcsv.jsp 这个。其中85是linux的系统号。
【解决方案3】:

使用File.pathSeparator 获取系统相关的路径分隔符。

已编辑:

如果您只想要一个临时目录,请使用File.createTempFile(..)

示例文件路径:http://www.exampledepot.com/egs/java.io/ConstructFilePath.html

临时文件示例:http://www.exampledepot.com/egs/java.io/CreateTempFile.html

已编辑:

在Servlet环境下保存文件:here

【讨论】:

  • 如果您能解释一下如何在我的代码中使用它,那就太好了?
  • private static final String TMP_DIR_PATH = File.separator + "webapps" + File.separator + "Readcsv" + File.separator + "tmp"; 我在我的代码中使用了这个。但我得到的错误是javax.servlet.ServletException: \webapps\Readcsv\tmp is not a directory
  • 在 servlet 环境中,唯一安全的方法是保存 servlet 的安装位置。调用 getServletContext.getRealPath(servletPath) 以获取安装 servlet 的文件系统上的路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多