我需要创建临时目录,但是当我尝试在临时目录中创建文件时,我总是被拒绝访问。
java.io.FileNotFoundException: C:\tmpDir7504230706415790917 (Access Denied)
这是我的代码:
public static File createTempDir() throws IOException {
File temp = File.createTempFile("tmpDir", "", new File("C:/"));
temp.delete();
temp.mkdir();
return temp;
}
public File createFile(InputStream inputStream, File tmpDir ) {
File file = null;
if (tmpDir.isDirectory()) {
try {
file = new File(tmpDir.getAbsolutePath());
// write the inputStream to a FileOutputStream
OutputStream out = new FileOutputStream(file);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
inputStream.close();
out.flush();
out.close();
System.out.println("New file created!");
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
return file;
}
我正在开发一个Web应用程序,我正在使用tomcat。有没有办法在tomcat服务器内存上创建临时文件?我知道这很奇怪,但我不知道......也许这是可能的。
答案 0 :(得分:13)
您可以使用Tomcat的临时文件夹 如果你使用
<%=System.getProperty("java.io.tmpdir")%>
在JSP中,您可以获得它的路径。
答案 1 :(得分:4)
代码中的这一行表示在目录“C:\”中创建一个名称以文本“tmpDir”开头的文件。那不是你想要的。
File temp = File.createTempFile("tmpDir","",new File("C:/"));
操作系统正在禁止操作系统,因为C:\是受保护的目录。请改用以下内容:
File temp = File.createTempFile("tmp",null);
这将让Java确定适当的临时目录。您的文件将具有简单的前缀“tmp”,后跟一些随机文本。您可以将“tmp”更改为对您的应用程序有意义的任何内容,以防您需要手动清除这些临时文件并希望能够快速识别它们。
答案 2 :(得分:1)
由于默认权限设置,您通常无法直接写入C:\
。我有时会有这样的许可问题。但是,您可以在用户文件夹中编写临时文件。通常,这是XP上的C:\Documents and Settings\UserName\
或vista和Windows 7上的C:\Users\UserName\
。如果您想根据操作系统平台获取主目录,那么来自Apache Lang的工具SystemUtils非常有用
例如:
SystemUtils.getUserDir();
SystemUtils.getUserHome();
<强>更新强>
此外,您创建临时文件对象,但调用mkdir使其进入目录并尝试将文件写入该目录对象。您只能将文件写入目录,而不能写入目录本身。要解决此问题,请不要致电temp.mkdir();
或将此file=new File(tmpDir.getAbsolutePath());
更改为file=new File(tmpDir, "sometempname");
答案 3 :(得分:0)
在安装了tomcat7的Linux上:
因此,如果您正在运行Web应用程序,那么这是Tomcat用于创建临时文件的临时目录。
TOMCAT_HOME/temp
在我的情况下,TOMCAT_HOME =&gt;的/ usr /共享/ tomcat7
如果您运行的是没有tomcat的Java程序,默认情况下它使用/ tmp目录。
不确定它是否会影响,但我也运行了这个命令。
chmod 777 on TOMCAT_HOME/temp