Comment créer un fichier dans un répertoire en java?


156

Si je veux créer un fichier dans C:/a/b/test.txt , puis-je faire quelque chose comme:

File f = new File("C:/a/b/test.txt");

En outre, je souhaite utiliser FileOutputStreampour créer le fichier. Alors, comment pourrais-je le faire? Pour une raison quelconque, le fichier n'est pas créé dans le bon répertoire.

Réponses:


245

La meilleure façon de le faire est:

String path = "C:" + File.separator + "hello" + File.separator + "hi.txt";
// Use relative path for Unix systems
File f = new File(path);

f.getParentFile().mkdirs(); 
f.createNewFile();

35
Ne fonctionnera pas pour Linux car il n'y a pas de "C:" dans les systèmes Unix.
Marcelo

33
L'utilisation new File("/a/b/test.txt")fonctionne pour les deux systèmes. Sous Windows, il sera écrit sur le même disque que celui où JVM s'exécute.
BalusC

6
f.getParentFile().mkdirs(); f.createNewFile();
Patrick Bergner

1
N'oubliez pas de vérifier la méthode appelée (mkdirs et createNewFile) appelle des erreurs
Alessandro S.

1
if (! file.exists ()) f.createNewFile ();
Mehdi

50

Vous devez vous assurer que les répertoires parents existent avant d'écrire. Vous pouvez le faire par File#mkdirs().

File f = new File("C:/a/b/test.txt");
f.getParentFile().mkdirs();
// ...

38

Avec Java 7 , vous pouvez utiliser Path, Pathset Files:

import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CreateFile {

    public static void main(String[] args) throws IOException {
        Path path = Paths.get("/tmp/foo/bar.txt");

        Files.createDirectories(path.getParent());

        try {
            Files.createFile(path);
        } catch (FileAlreadyExistsException e) {
            System.err.println("already exists: " + e.getMessage());
        }
    }
}

12

Utilisation:

File f = new File("C:\\a\\b\\test.txt");
f.mkdirs();
f.createNewFile();

Notez que j'ai changé les barres obliques pour doubler les barres obliques inverses pour les chemins dans le système de fichiers Windows. Cela créera un fichier vide sur le chemin donné.


1
Sous Windows, \\ et / sont valides. Ce createNewFile()n'est d'ailleurs pas nécessaire lorsque vous y écrivez de FileOutputStreamtoute façon.
BalusC

@Eric a noté et corrigé, merci.
Marcelo

Cela a créé un répertoire appelé test.txt au lieu de file.
MasterJoe2

3

Une façon meilleure et plus simple de faire cela:

File f = new File("C:/a/b/test.txt");
if(!f.exists()){
   f.createNewFile();
}

La source


2
String path = "C:"+File.separator+"hello";
String fname= path+File.separator+"abc.txt";
    File f = new File(path);
    File f1 = new File(fname);

    f.mkdirs() ;
    try {
        f1.createNewFile();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Cela devrait créer un nouveau fichier dans un répertoire


0

Créer un nouveau fichier dans le chemin spécifié

import java.io.File;
import java.io.IOException;

public class CreateNewFile {

    public static void main(String[] args) {
        try {
            File file = new File("d:/sampleFile.txt");
            if(file.createNewFile())
                System.out.println("File creation successfull");
            else
                System.out.println("Error while creating File, file already exists in specified path");
        }
        catch(IOException io) {
            io.printStackTrace();
        }
    }

}

Sortie du programme:

Création de fichier réussie


0

Étonnamment, la plupart des réponses ne donnent pas un code de travail complet. C'est ici:

public static void createFile(String fullPath) throws IOException {
    File file = new File(fullPath);
    file.getParentFile().mkdirs();
    file.createNewFile();
}

public static void main(String [] args) throws Exception {
    String path = "C:/donkey/bray.txt";
    createFile(path);
}

0

Pour créer un fichier et y écrire une chaîne:

BufferedWriter bufferedWriter = Files.newBufferedWriter(Paths.get("Path to your file"));
bufferedWriter.write("Some string"); // to write some data
// bufferedWriter.write("");         // for empty file
bufferedWriter.close();

Cela fonctionne pour Mac et PC.


0

Pour utiliser FileOutputStream, essayez ceci:

public class Main01{
    public static void main(String[] args) throws FileNotFoundException{
        FileOutputStream f = new FileOutputStream("file.txt");
        PrintStream p = new PrintStream(f);
        p.println("George.........");
        p.println("Alain..........");
        p.println("Gerard.........");
        p.close();
        f.close();
    }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.