1

一時ディレクトリを作成する必要がありますが、一時ディレクトリにファイルを作成しようとすると、常にアクセスが拒否されます。

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 サーバーのメモリに一時ファイルを作成する方法はありますか? 私はそれが奇妙であることを知っていますが、私にはわかりません...多分それは可能です.

4

4 に答える 4

13

Tomcatの一時フォルダを使用できます。
使用する場合

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

JSPでは、JSPへのパスを取得できます。

于 2012-09-28T16:41:47.823 に答える
4

コードのこの行は、名前がテキスト「tmpDir」で始まるファイルをディレクトリ「C:\」に作成することを示しています。それはあなたが望むものではありません。

File temp = File.createTempFile("tmpDir","",new File("C:/"));

C:\ は保護されたディレクトリであるため、オペレーティング システムはそれを正しく許可していません。代わりに次を使用します。

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

これにより、Java が適切な一時ディレクトリを決定できるようになります。ファイルには、単純な接頭辞「tmp」の後にランダムなテキストが続きます。これらの一時ファイルを手動で消去する必要があり、それらをすばやく識別できるようにする場合は、「tmp」をアプリにとって意味のあるものに変更できます。

于 2012-09-28T16:33:30.943 に答える
1

C:\デフォルトの権限設定のため、通常は直接書き込むことはできません。そうするための許可の問題が時々あります。ただし、一時ファイルをユーザー フォルダーに書き込むことはできます。通常、これはC:\Documents and Settings\UserName\XP またはC:\Users\UserName\Vista および Windows 7 で実行されます。OS プラットフォームに応じてホーム ディレクトリを取得する場合は、Apache Lang のSystemUtilsというツールが非常に役立ちます。

例えば:

SystemUtils.getUserDir();
SystemUtils.getUserHome();

アップデート

また、一時ファイル オブジェクトを作成しますが、mkdir を呼び出してそれをディレクトリにし、ファイルをそのディレクトリ オブジェクトに書き込もうとします。ファイルはディレクトリにしか書き込めませんが、ディレクトリ自体には書き込めません。この問題を解決するには、呼び出さないか、これを次のようにtemp.mkdir();変更します。file=new File(tmpDir.getAbsolutePath());file=new File(tmpDir, "sometempname");

于 2012-09-28T16:34:21.000 に答える