Jak utworzyć plik w katalogu w Javie?

156

Jeśli chcę utworzyć plik w C:/a/b/test.txt, mogę zrobić coś takiego:

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

Chcę również użyć FileOutputStreamdo utworzenia pliku. Więc jak mam to zrobić? Z jakiegoś powodu plik nie jest tworzony w odpowiednim katalogu.

Uerefer
źródło

Odpowiedzi:

245

Najlepszym sposobem na to jest:

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();
RMT
źródło
35
Nie będzie działać dla Linuksa, ponieważ nie ma czegoś takiego jak „C:” w systemach uniksowych.
Marcelo
33
Używanie new File("/a/b/test.txt")działa dla obu systemów. W systemie Windows zostanie zapisany na tym samym dysku, na którym działa JVM.
BalusC
6
f.getParentFile().mkdirs(); f.createNewFile();
Patrick Bergner,
1
Nie zapomnij sprawdzić wywołanej metody (mkdirs i createNewFile) wywołań błędów
Alessandro S.
1
if (! file.exists ()) f.createNewFile ();
Mehdi
50

Przed zapisaniem musisz upewnić się, że katalogi nadrzędne istnieją. Możesz to zrobić przez File#mkdirs().

File f = new File("C:/a/b/test.txt");
f.getParentFile().mkdirs();
// ...
BalusC
źródło
38

Z Java 7 , można użyć Path, Pathsoraz 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());
        }
    }
}

źródło
12

Posługiwać się:

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

Zauważ, że zmieniłem ukośniki w przód na podwójne ukośniki w tył dla ścieżek w systemie plików Windows. Spowoduje to utworzenie pustego pliku w podanej ścieżce.

Marcelo
źródło
1
W systemie Windows poprawne są zarówno \\, jak i /. createNewFile()Jest przy okazji niepotrzebne, gdy piszesz do niej ze FileOutputStreamtak.
BalusC
@Eric zauważył i poprawił, dziękuję.
Marcelo
Spowoduje to utworzenie katalogu o nazwie test.txt zamiast pliku.
MasterJoe2
3

Lepszy i prostszy sposób na zrobienie tego:

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

Źródło

Mehdi
źródło
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();
    }
}

Powinno to spowodować utworzenie nowego pliku w katalogu

Chitta
źródło
0

Utwórz nowy plik w określonej ścieżce

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

}

Wyjście programu:

Utworzenie pliku powiodło się

AKHY
źródło
0

Zaskakujące jest, że wiele odpowiedzi nie zawiera pełnego działającego kodu. Oto ona:

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);
}
MasterJoe2
źródło
0

Aby stworzyć plik i napisać tam jakiś ciąg:

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

Działa to na komputerach Mac i PC.

Kirill Ch
źródło
0

Aby skorzystać z FileOutputStream, spróbuj tego:

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();
    }
}
Fridjato Part Fridjat
źródło