Làm thế nào để tạo một tập tin trong một thư mục trong java?


156

Nếu tôi muốn tạo một tệp trong C:/a/b/test.txt, tôi có thể làm một cái gì đó như:

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

Ngoài ra, tôi muốn sử dụng FileOutputStreamđể tạo tập tin. Vì vậy, làm thế nào tôi sẽ làm điều đó? Vì một số lý do, tập tin không được tạo trong thư mục bên phải.

Câu trả lời:


245

Cách tốt nhất để làm điều đó là:

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
Không hoạt động cho Linux vì không có thứ gọi là "C:" trong các hệ thống unix.
Marcelo

33
Sử dụng new File("/a/b/test.txt")công việc cho cả hai hệ thống. Trên Windows, nó sẽ được ghi vào cùng một đĩa khi JVM chạy.
BalusC

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

1
Đừng quên kiểm tra các phương thức được gọi (mkdirs và createdNewFile) để tìm lỗi
Alessandro S.

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

50

Bạn cần đảm bảo rằng các thư mục cha tồn tại trước khi viết. Bạn có thể làm điều này bằng cách File#mkdirs().

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

38

Với Java 7 , bạn có thể sử dụng Path, PathsFiles:

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

Sử dụng:

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

Lưu ý rằng tôi đã thay đổi dấu gạch chéo về phía trước để tăng gấp đôi dấu gạch chéo cho các đường dẫn trong Hệ thống tệp Windows. Điều này sẽ tạo ra một tập tin trống trên đường dẫn đã cho.


1
Trên Windows, cả \\ và / đều hợp lệ. Các createNewFile()là bằng cách không cần thiết khi bạn viết thư cho nó với FileOutputStreamanyway.
BalusC

@Eric Lưu ý và sửa chữa, Cảm ơn bạn.
Marcelo

Điều này tạo ra một thư mục gọi là test.txt thay vì tệp.
MasterJoe2

3

Một cách tốt hơn và đơn giản hơn để làm điều đó:

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

Nguồn


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

Điều này sẽ tạo ra một tập tin mới trong một thư mục


0

Tạo tệp mới trong đường dẫn được chỉ định

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

}

Chương trình đầu ra:

Tạo tập tin thành công


0

Đáng ngạc nhiên, nhiều câu trả lời không cung cấp mã làm việc hoàn chỉnh. Đây là:

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

Để tạo một tập tin và viết một số chuỗi ở đó:

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

Điều này hoạt động cho Mac và PC.


0

Để sử dụng FileOutputStream, hãy thử điều này:

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();
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.