Java 在Tomcat中编写临时文件

Java 在Tomcat中编写临时文件,java,tomcat,file-io,temporary-files,Java,Tomcat,File Io,Temporary Files,我需要创建临时目录,但当我尝试在临时目录中创建文件时,访问总是被拒绝 java.io.FileNotFoundException: C:\tmpDir7504230706415790917 (Access Denied) 这是我的密码: public static File createTempDir() throws IOException { File temp = File.createTempFile("tmpDir", "", new File("C:/")); t

我需要创建临时目录,但当我尝试在临时目录中创建文件时,访问总是被拒绝

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服务器内存上创建临时文件?我知道这很奇怪,但我不知道。。。可能吧。

代码中的这一行表示在目录“C:\”中创建一个名称以文本“tmpDir”开头的文件。那不是你想要的

File temp = File.createTempFile("tmpDir","",new File("C:/"));
由于C:\是受保护的目录,操作系统正确地禁止了该操作。请改用以下方法:

File temp = File.createTempFile("tmp",null);

这将让Java确定适当的临时目录。您的文件将具有简单的前缀“tmp”,后跟一些随机文本。您可以将“tmp”更改为对您的应用程序有意义的任何内容,以防您需要手动清除这些临时文件并希望能够快速识别它们。

代码中的这一行表示在目录“C:\”中创建一个名称以文本“tmpDir”开头的文件。那不是你想要的

File temp = File.createTempFile("tmpDir","",new File("C:/"));
由于C:\是受保护的目录,操作系统正确地禁止了该操作。请改用以下方法:

File temp = File.createTempFile("tmp",null);

这将让Java确定适当的临时目录。您的文件将具有简单的前缀“tmp”,后跟一些随机文本。您可以将“tmp”更改为对应用程序有意义的任何内容,以防您需要手动清除这些临时文件并希望能够快速识别它们。

由于默认权限设置,您通常无法直接写入
C:\
。我有时有这样做的许可问题。但是,您可以在用户文件夹中写入临时文件。通常,这是XP上的
C:\Documents and Settings\UserName\
,或vista和Windows 7上的
C:\Users\UserName\
。如果您希望根据操作系统平台获取主目录,则从ApacheLang调用的工具非常有用

例如:

SystemUtils.getUserDir();
SystemUtils.getUserHome();
更新


另外,您创建了一个临时文件对象,但调用mkdir将其放入目录,并尝试将文件写入该目录对象。您只能将文件写入目录,而不能写入目录本身。要解决此问题,请不要调用
temp.mkdir()
或更改此
文件=新文件(tmpDir.getAbsolutePath())
文件=新文件(tmpDir,“sometempname”)

由于默认权限设置,您通常无法直接写入
C:\
。我有时有这样做的许可问题。但是,您可以在用户文件夹中写入临时文件。通常,这是XP上的
C:\Documents and Settings\UserName\
,或vista和Windows 7上的
C:\Users\UserName\
。如果您希望根据操作系统平台获取主目录,则从ApacheLang调用的工具非常有用

例如:

SystemUtils.getUserDir();
SystemUtils.getUserHome();
更新


另外,您创建了一个临时文件对象,但调用mkdir将其放入目录,并尝试将文件写入该目录对象。您只能将文件写入目录,而不能写入目录本身。要解决此问题,请不要调用
temp.mkdir()
或更改此
文件=新文件(tmpDir.getAbsolutePath())
文件=新文件(tmpDir,“sometempname”)

您可以使用Tomcat的临时文件夹。
如果你使用

<%=System.getProperty("java.io.tmpdir")%>  


在JSP中,您可以获得它的路径。

您可以使用Tomcat的临时文件夹。
如果你使用

<%=System.getProperty("java.io.tmpdir")%>  


在JSP中,您可以获得它的路径。

在安装了tomcat7的Linux上:

因此,如果您正在运行web应用程序,这就是Tomcat用于创建临时文件的临时目录

TOMCAT_HOME/temp
在我的例子中,TOMCAT_HOME=>/usr/share/tomcat7

如果您运行的Java程序没有tomcat,默认情况下它使用/tmp目录

java.io.FileNotFoundException: C:\tmpDir7504230706415790917 (Access Denied)
不确定它是否会影响,但我也运行了这个命令

chmod 777 on TOMCAT_HOME/temp

在安装了tomcat7的Linux上:

因此,如果您正在运行web应用程序,这就是Tomcat用于创建临时文件的临时目录

TOMCAT_HOME/temp
在我的例子中,TOMCAT_HOME=>/usr/share/tomcat7

如果您运行的Java程序没有tomcat,默认情况下它使用/tmp目录

java.io.FileNotFoundException: C:\tmpDir7504230706415790917 (Access Denied)
不确定它是否会影响,但我也运行了这个命令

chmod 777 on TOMCAT_HOME/temp

尝试使用ByteArrayOutputStream类而不是FileOutputStream,这样可以将数据写入内存中的缓冲区,而无需使用文件。我不懂Java,所以不能提供更多帮助。@Oscar在ByteArrayOutputStream中写入数据后,我可以将其转换为文件吗?Tomcat服务器内存与您的问题有什么关系?@EJP我的意思是有没有一种方法可以使用Tomcat上传Java.io.File,然后使用它,这就像使用tomcat临时存储文件,并在使用后删除它们。换句话说,记忆与此无关。您正在寻找存储临时文件的方法。我建议您修改标题和文本。尝试使用ByteArrayOutputStream类而不是FileOutputStream,这样您就可以将数据写入内存中的缓冲区,而无需使用文件。我不懂Java,所以不能提供更多帮助。@Oscar在ByteArrayOutputStream中写入数据后,我可以将其转换为文件吗?Tomcat服务器内存与您的问题有什么关系?@EJP我的意思是有没有一种方法可以使用Tomcat上传Java.io.File,然后使用它,这就像使用tomcat临时存储文件,并在使用后删除它们。换句话说,记忆与此无关。您正在寻找存储临时文件的方法。我建议你修改你的标题和文本。我试过了,但我得到了这个java.io.FileNotFoundException:C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\tmpDir8076115893277193438.tmp(拒绝访问)我想我看到了问题。你的哪一行代码导致了这个错误?从更大的角度来看,我认为rickz发现了什么。创建临时目录不需要这些代码。只要使用