2011-10-12 25 views
13

Tôi đã cố mở một tệp để đọc.Mở tệp Android

Khi sử dụng: Scanner input = new Scanner(filename); tập tin không thể được tìm thấy

nhưng khi tôi sử dụng:

InputStream in = openFileInput(filename); 
Scanner input = new Scanner(in); 

Nó làm việc. Tại sao dòng mã đầu tiên lại sai?

Trả lời

10

Tệp được lưu trữ trên thiết bị ở một vị trí cụ thể, phụ thuộc vào ứng dụng, đó là những gì tôi giả sử openFileInput thêm ở đầu tên tệp. Kết quả cuối cùng (vị trí + tên file) được xây dựng như sau:

/data/data/<application-package>/files/<file-name> 

Cũng lưu ý rằng các tài liệu nói rằng các tham số openFileInputcannot contain path separators.

Để tránh khó mã hóa đường dẫn vị trí, nguyên tắc có thể khác với thiết bị, bạn có thể lấy đối tượng File trỏ đến thư mục lưu trữ bằng cách gọi getFilesDir và sử dụng nó để đọc bất kỳ tệp nào bạn muốn đến. Ví dụ:

File filesDir = getFilesDir(); 
Scanner input = new Scanner(new File(filesDir, filename)); 

Lưu ý rằng việc xây dựng một Scanner bằng cách thông qua một String như một tham số sẽ dẫn đến việc máy quét làm việc về nội dung của chuỗi, tức là giải thích nó như là nội dung thực tế để quét thay vì như tên của một tệp để mở.

+0

cảm ơn !! tôi đã sử dụng hàm tạo sai lúc đầu: P .. sau đó tôi đã cố gắng sử dụng Scanner sc = new Scanner (tệp mới (tên tệp)); nhưng không hoạt động ... Tệp tệpDir = getFilesDir(); Đầu vào máy quét = Máy quét mới (tệp mới (filesDir, tên tệp)); hoạt động tuyệt vời này: D – zSt

-4
Scanner sc = new Scanner(new File(filename)); 
+10

bạn có thể vui lòng cung cấp thêm thông tin không? Ném mã xung quanh không giúp ai ... – WarrenFaith

9

Điều này đã khiến tôi điên rồ vài phút trước. Tôi quên thêm dòng này để bày tỏ:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Tôi mong chờ một phép từ chối nhắn. Nhưng chỉ có một tập tin không tìm thấy ...

Trong trường hợp của bạn:openFileInput mở một tập tin trong thư mục dữ liệu ứng dụng riêng của bạn (/data/data/your.package/filename). Điều này không bao giờ thất bại. Nhưng máy quét cố gắng mở nó trên đường dẫn gốc. Vì vậy, khi bạn muốn đọc một tập tin từ thẻ SD hơn bạn sẽ sử dụng Environement.getExternalStorageDirectory().getAbsolutePath() + "/" + filename.