2010-11-02 33 views
0

我参考了这个example并创建了一个servlet应用程序。在Java代码中使用文件路径

它的工作原理与在代码中提到的TMP_DIR & dest_dir将路径完全正常(我创建了一个在C盘名为tmp文件夹&也是我创建了一个名为files我的应用程序文件夹内的文件夹中。

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

+0

重复的[错误而从Windows转移到Linux机器JSP代码(http://stackoverflow.com/questions/4079934/error-while-migrating -jsp-code-from-windows-to-linux-machine) – BalusC 2010-11-02 18:47:56

回答

2

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

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

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(); 

或使用@罗布麻的做法:

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

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

如果你仍然感到困惑,继续问 - 这就是为什么!

更新:如果你正在做任何东西与文件它值得熟悉Apache的FileUtils和IOUtils。有几件事JDK不擅长或自然地做,Apache提供更好的支持。

+0

我很困惑如何在我提到的例子中使用这个getTempDirectory()..你能解释一样吗?我是java的初学者... – LGAP 2010-11-02 17:49:57

+0

'Readcsv.java:29:无法找到符号 符号:变量IOUtils location:class Readcsv'将IOUtils.getTempDirectoryPath()添加到源代码时出现此错误.. – LGAP 2010-11-02 18:08:49

+0

您需要从Apache加载IOUtils类库(参见http://commons.apache.org/io/并使用下载)。这应该给你一个你放入classpath的jar。在开发时尝试引入Maven,因为它会照顾这些依赖关系。 – 2010-11-02 18:12:36

2

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

编辑:

如果你只是想要一个临时目录,然后使用File.createTempFile(..)

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

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

编辑:

在Serv中保存文件让环境:here

+0

如果你能解释我如何在我的代码中使用相同的代码,那将会很棒吗? – LGAP 2010-11-02 18:43:07

+0

Post modified .. – 2010-11-02 19:20:33

+0

'private static final String TMP_DIR_PATH = File.separator +“webapps”+ File.separator +“Readcsv”+ File.separator +“tmp”;'我在我的代码中使用了这个。但是我得到错误:'javax.servlet.ServletException:\ webapps \ Readcsv \ tmp不是目录 ' – LGAP 2010-11-02 19:28:58

2

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

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

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

我的实际任务是读取csv文件上的内容并将其添加到数据库中。当我使用你的代码时,这个任务在Windows系统中完成。但是,当使用Linux服务器时,csv文件没有正确读取,结果表示'0项已添加到我的数据库中' – LGAP 2010-11-02 18:11:53

+0

另一个信息:我正在使用我的Windows机器上的Linux服务器。在浏览器中使用'http://192.168.0.85:8080/Readcsv/uploadcsv.jsp'。其中85是linux的系统编号。 – LGAP 2010-11-02 18:13:29

+0

我希望你不会在错误回应中使用'你'。 – AHungerArtist 2010-11-02 21:43:01