Android; Kiểm tra nếu tập tin tồn tại mà không tạo một cái mới


227

Tôi muốn kiểm tra xem tập tin có tồn tại trong thư mục gói của tôi không, nhưng tôi không muốn tạo tập tin mới.

File file = new File(filePath);
if(file.exists()) 
     return true;

Mã này có kiểm tra mà không tạo tập tin mới không?


có thể trùng lặp Kiểm tra nếu tệp tồn tại
piokuc

1
@Kunok Tôi đang kiểm tra nhận xét chỉnh sửa của bạn: đã xóa các từ như xe tăng ... : P
Kevin Guan

1
@KevinGuan Ôi trời ơi, tôi vừa về nhà từ bữa tiệc đêm mới nên tôi không thể viết đúng :)
Kunok

Câu trả lời:


440

Đoạn mã của bạn không tạo ra một mã mới, nó chỉ kiểm tra xem nó đã có chưa và không có gì khác.

File file = new File(filePath);
if(file.exists())      
//Do something
else
// Do something else.

5
Không biết tại sao trong trường hợp của tôi, mã này đang tạo một tệp mới.
từ

Làm thế nào để kiểm tra trong thư mục phụ cũng?
Pratik Butani

4
Điều này là như vậy bởi vì không có phương thức tĩnh: File.exists (Tệp chuỗi), do đó bạn phải kích hoạt một đối tượng Tệp mới để truy cập phương thức 'Exists'.
Giova

3
Tôi nghĩ OP không muốn tạo đối tượng tập tin mới.
AndroDev

1
@AndroDev không - anh ấy không muốn tạo FILE mới, câu trả lời sẽ tạo ra TÀI LIỆU THAM KHẢO mới để nộp.
Mary Paździoch

31

Khi bạn sử dụng mã này, bạn không tạo một Tệp mới, nó chỉ tạo một tham chiếu đối tượng cho tệp đó và kiểm tra xem nó có tồn tại hay không.

File file = new File(filePath);
if(file.exists()) 
    //do something

21

Nó làm việc cho tôi:

File file = new File(getApplicationContext().getFilesDir(),"whatever.txt");
    if(file.exists()){
       //Do something
    }
    else{
       //Nothing
     }

2
Đây là giải pháp nếu bạn chỉ có tên tệp chứ không phải đường dẫn của nó
Zach

1
@Zach Không thực sự, đó là đường dẫn sẽ là tham số đầu tiên tôi gửi (getApplicationContext (). GetFilesDir ())
Jordi Vicens

8

Khi bạn nói "trong thư mục gói của bạn", bạn có nghĩa là các tệp ứng dụng cục bộ của bạn? Nếu vậy, bạn có thể lấy danh sách của chúng bằng phương thức Context.fileList () . Chỉ cần lặp qua và tìm kiếm tập tin của bạn. Giả sử bạn đã lưu tệp gốc bằng Context.openFileOutput () .

Mã mẫu (trong một Hoạt động):

public void onCreate(...) {
    super.onCreate(...);
    String[] files = fileList();
    for (String file : files) {
        if (file.equals(myFileName)) {
            //file exits
        }
    }
}

5

Lớp methodsPath là cú pháp, nghĩa là chúng hoạt động trên thể hiện Path. Nhưng cuối cùng, bạn phải truy cập filehệ thống để xác minh rằng có một Đường dẫn cụ thể tồn tại

 File file = new File("FileName");
 if(file.exists()){
 System.out.println("file is already there");
 }else{
 System.out.println("Not find file ");
 }

1
public boolean FileExists(String fname) {
        File file = getBaseContext().getFileStreamPath(fname);
        return file.exists();
}

0

Thuộc tính mở rộng của Kotlin

Không có tệp nào được tạo khi bạn tạo đối tượng Tệp, nó chỉ là một giao diện.

Để làm việc với các tệp dễ dàng hơn, có một .toFilechức năng hiện có trên Uri

Bạn cũng có thể thêm thuộc tính mở rộng trên Tệp và / hoặc Uri, để đơn giản hóa việc sử dụng hơn nữa.

val File?.exists get() = this?.exists() ?: false
val Uri?.exists get() = File(this.toString).exists()

Sau đó chỉ cần sử dụng uri.existshoặc file.existsđể kiểm tra.

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.