Làm cách nào để lấy thư mục của tệp bằng đối tượng Tệp?


110

Hãy xem xét mã:

File file = new File("c:\\temp\\java\\testfile");

testfilelà một tệp, và nó có thể tồn tại hoặc không. Tôi muốn lấy thư mục c:\\temp\\java\\bằng cách sử dụng Fileđối tượng. Làm thế nào để tôi làm điều này?

Câu trả lời:


170

Trong cả hai trường hợp, tôi mong đợi file.getParent()(hoặc file.getParentFile()) cung cấp cho bạn những gì bạn muốn.

Ngoài ra, nếu bạn muốn tìm hiểu xem bản gốc File tồn tại hay khôngcó phải là một thư mục exists()hay isDirectory()không thì bạn đang theo dõi.


9
Sử dụng file.getParent () một cách cẩn thận, vì nó có thể trả về null trong một số trường hợp.
geschema

Câu trả lời của @geschema Ponaguynik bên dưới giải quyết vấn đề này
4myle


14

Nếu bạn làm điều gì đó như thế này:

File file = new File("test.txt");
String parent = file.getParent();

parent sẽ là null.

Vì vậy, để lấy thư mục của tệp này, bạn có thể làm tiếp theo:

parent = file.getAbsoluteFile().getParent();

8

File API File.getParent hoặc File.getParentFile sẽ trả về cho bạn Thư mục tệp.

Mã của bạn phải như sau:

    File file = new File("c:\\temp\\java\\testfile");
    if(!file.exists()){
        file = file.getParentFile();
    }

Ngoài ra, bạn có thể kiểm tra tệp mẹ của mình là thư mục bằng cách sử dụng API File.isDirectory

if(file.isDirectory()){
    System.out.println("file is directory ");
}

4
File directory = new File("Enter any 
                directory name or file name");
boolean isDirectory = directory.isDirectory();
if (isDirectory) {
  // It returns true if directory is a directory.
  System.out.println("the name you have entered 
         is a directory  : "  +    directory);  
  //It returns the absolutepath of a directory.
  System.out.println("the path is "  + 
              directory.getAbsolutePath());
} else {
  // It returns false if directory is a file.
  System.out.println("the name you have
   entered is a file  : " +   directory);
  //It returns the absolute path of a file.
  System.out.println("the path is "  +  
            file.getParent());
}

1
Bạn không trả lời câu hỏi, điều này không hoạt động đối với tệp.
toni07

codefinal File file = new File ("C: /dev/changeofseasons.mid"); System.out.println ("tệp tồn tại?" + Tệp.exists ()); System.out.println ("thư mục của tệp:" + file.getAbsolutePath ()); Ok, xin lỗi vì đã thụt lề sai, tôi không nghĩ rằng có thể định dạng mã trong nhận xét. Tuy nhiên, mã của bạn rõ ràng không hoạt động.
toni07

Cảm ơn, đã sửa <! --->
Jigar Joshi

3
File filePath=new File("your_file_path");
String dir="";
if (filePath.isDirectory())
{
    dir=filePath.getAbsolutePath();
}
else
{
    dir=filePath.getAbsolutePath().replaceAll(filePath.getName(), "");
}

Mô tả là cần thiết.
Halvor Holsten Strand

1
Chào mừng bạn đến với Stack Overflow! Nói chung, các câu trả lời mã cần giải thích một chút - hãy xem bài đăng meta Stackoverflow này . Với câu trả lời bạn đã đăng, bạn có thể cần giải thích rằng bạn đang cố gắng đưa ra một trường hợp chung và nó liên quan như thế nào đến bài đăng thực tế của OP. Nghiêm trọng hơn - bạn có thể muốn xem xét nó sẽ hoạt động như thế nào your_file_path = "C:\\testfiles\\temp\\testfile";- tôi không nghĩ nó sẽ mang lại những gì bạn hy vọng.
J Richard Snape

Nên là câu trả lời chính xác. Điều này sẽ hiển thị đường dẫn đầy đủ đến tệp.
Magno C

0

Bạn có thể sử dụng cái này

 File dir=new File(TestMain.class.getClassLoader().getResource("filename").getPath());

0
String parentPath = f.getPath().substring(0, f.getPath().length() - f.getName().length()); 

Đây sẽ là giải pháp của tôi


-1

Tôi thấy điều này hữu ích hơn để có được vị trí tệp tuyệt đối.

File file = new File("\\TestHello\\test.txt");
System.out.println(file.getAbsoluteFile());
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.