web-dev-qa-db-ja.com

Javaでファイル名に乱数を追加せずに一時ファイルを作成する方法は?

一時ファイルを作成する必要があるので、これを試しました:

String[] TempFiles = {"c1234c10","c1234c11","c1234c12","c1234c13"};
for (int i = 0; i <= 3; i++) {
    try {
        String tempFile = TempFiles[i]; 
        File temp = File.createTempFile(tempFile, ".xls"); 
        System.out.println("Temp file : " + temp.getAbsolutePath());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

出力は次のようになります。

 Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c108415816200650069233.xls
 Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c113748833645638701089.xls
 Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c126104766829220422260.xls
 Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c137493179265536640669.xls

これで、ファイル名に追加される余分な数字(long int)は必要ありません。どうすればそれを達成できますか?ありがとう

32
RT_

まず、次のスニペットを使用して、システムの一時ディレクトリを取得します。

String tDir = System.getProperty("Java.io.tmpdir");

次に、tDir変数をtempFiles[]配列と組み合わせて使用​​して、各ファイルを個別に作成します。

35
Marvin Pinto

File.createTempFileを使用して一時ファイル名を生成する場合はできません。私はJava一時ファイルを生成するためのソースを見ました(Java 1.7の場合、バージョンを記述していなかったので、私のものを使用しました):

private static class TempDirectory {
    private TempDirectory() { }

    // temporary directory location
    private static final File tmpdir = new File(fs.normalize(AccessController
        .doPrivileged(new GetPropertyAction("Java.io.tmpdir"))));
    static File location() {
        return tmpdir;
    }

    // file name generation
    private static final SecureRandom random = new SecureRandom();
    static File generateFile(String prefix, String suffix, File dir) {
        long n = random.nextLong();
        if (n == Long.MIN_VALUE) {
            n = 0;      // corner case
        } else {
            n = Math.abs(n);
        }
        return new File(dir, prefix + Long.toString(n) + suffix);
    }
}

これは、一時ファイル名を生成するJava JDKのコードです。乱数を生成し、ファイル名のプレフィックスとサフィックスの間に挿入することがわかります。これは、 File.Java」(Java.io内)。これを変更する方法はありませんでした。

17
jmq

Guava を使用:

import com.google.common.io.Files;

...

File myTempFile = new File(Files.createTempDir(), "MySpecificName.png");
11
Brad Johnson

システム全体の一時ディレクトリに特定の名前のファイルを作成する場合は、_%temp%_環境変数を展開し、ファイルを手動で作成します。これは問題ありません。

編集:実際には、System.getProperty("Java.io.tmpdir"));を使用します。

4
Irfy

カスタム名は次のように保存できます

File temp=new File(tempFile, ".xls");
if (!temp.exists()) {
    temp.createNewFile();
}
1
Junaid Malik

一時ディレクトリを作成して、そこに新しいファイルを保存できます。この方法では、追加するすべての新しいファイルにランダムな拡張子が付きません。完了したら、追加した一時ディレクトリを削除するだけです。

public static File createTempFile(String prefix, String suffix) {       
    File parent = new File(System.getProperty("Java.io.tmpdir"));   

    File temp = new File(parent, prefix + suffix);

    if (temp.exists()) {
        temp.delete();
    }

    try {
        temp.createNewFile();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

    return temp;
}


public static File createTempDirectory(String fileName) {       
    File parent = new File(System.getProperty("Java.io.tmpdir"));   

    File temp = new File(parent, fileName);

    if (temp.exists()) {
        temp.delete();
    }

    temp.mkdir();

    return temp;
}
1
user6186835
public static File createTempDirectory(String dirName) {
        File baseDir = new File(System.getProperty("Java.io.tmpdir"));
        File tempDir = new File(baseDir, dirName);
        if (tempDir.mkdir()) {
          return tempDir;
        }
        return null;
}