web-dev-qa-db-fra.com

Comment créer un fichier temporaire en Java sans le nombre aléatoire ajouté au nom du fichier?

J'ai besoin de créer un fichier temporaire, alors j'ai essayé ceci:

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

La sortie ressemble à ceci:

 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

Maintenant, je ne veux pas les numéros supplémentaires (long int) qui sont ajoutés au nom du fichier. Comment puis-je y arriver? Merci 

29
RT_

Commencez par utiliser l'extrait de code suivant pour obtenir le répertoire temporaire du système:

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

Utilisez ensuite la variable tDir avec votre tableau tempFiles[] pour créer chaque fichier individuellement.

35
Marvin Pinto

Vous ne pouvez pas utiliser File.createTempFile pour générer un nom de fichier temporaire. J'ai consulté le source Java pour générer un fichier temporaire (pour Java 1.7, vous n'avez pas indiqué votre version, alors je viens d'utiliser le mien):

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

C'est le code dans le JDK Java qui génère le nom du fichier temporaire. Vous pouvez voir qu'il génère un nombre aléatoire et l'insère dans votre nom de fichier entre votre préfixe et votre suffixe. C'est dans "File.Java" (en Java.io). Je n'ai vu aucun moyen de changer cela.

16
jmq

Utiliser Goyave :

import com.google.common.io.Files;

...

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

Si vous souhaitez que des fichiers portant des noms spécifiques soient créés dans le répertoire temporaire du système, développez la variable d'environnement %temp% et créez le fichier manuellement, rien de mal à cela.

Edit: En fait, utilisez System.getProperty("Java.io.tmpdir")); pour cela.

4
Irfy

Les noms personnalisés peuvent être enregistrés comme suit

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

Vous pouvez créer un répertoire temporaire puis y stocker de nouveaux fichiers. De cette façon, tous les nouveaux fichiers que vous ajouterez n'auront pas une extension aléatoire. Lorsque vous avez terminé, il ne vous reste plus qu'à supprimer le répertoire temporaire que vous avez ajouté.

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;
}
0