Tôi muốn tải xuống tệp văn bản từ url web và lưu tệp cục bộ trên thiết bị và sử dụng nó trong ứng dụng của tôi.Tải xuống tệp văn bản từ web
Code:
try {
File file = new File(getFilesDir(), "file.txt");
if (file.length() > 0) {
//File already exists and it is not empty
return;
}
URL url = new URL("https://www.abc.com/file.txt");
FileOutputStream fos = new FileOutputStream(file);
InputStream in = url.openStream();
byte[] buffer = new byte[1024];
int length = 0;
while ((length = in.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
fos.flush();
fos.close();
} catch (Exception e) {
// TODO:
}
Như bạn thấy, mã đi với getFilesDir()
giả định rằng luôn luôn tồn tại. Tuy nhiên, có một vài câu hỏi, với kết nối mạng và quyền phù hợp:
- Giả định của tôi là
getFilesDir()
không thành công? - Có trường hợp nào của một trong hai tệp không được tải xuống/sai nội dung, v.v., với mã này không?
- Khi tôi gặp sự cố trong đó tệp được tải xuống nhưng có tất cả các ký tự được mã hóa, cho dù tôi có tải xuống được bao nhiêu lần, nó vẫn có cùng văn bản được mã hóa. Chỉ khi tôi cài đặt lại ứng dụng của mình thì văn bản thích hợp đã được tải xuống. Và không bao giờ có vấn đề đó kể từ đó. Bất kỳ lý do nào cho hành vi kỳ lạ đó?
EDIT: Đây là những gì tôi nhận được như nội dung khi tôi cố gắng đọc các tập tin mà tôi đã tải xuống (đôi khi xảy ra 1 trong 10) được hiển thị trong logcat:
Mã để đọc các file:
BufferedReader inputReader= = new BufferedReader(
new InputStreamReader(new FileInputStream(file)));
String inputString;
StringBuffer stringBuffer = new StringBuffer();
while ((inputString = inputReader.readLine()) != null) {
Log.e("inputString: ", inputString);
}
inputReader.close();
cảm ơn
getFilesDir() sẽ luôn cung cấp thư mục tệp. Nhưng nó có thể chưa tồn tại tôi nghĩ. Vậy mã có tải xuống không? – greenapps
Cho đến nay thiết bị/trình giả lập nào tôi đã thử nghiệm, nó tải xuống tệp đúng cách. Nhưng tôi thấy ít người dùng báo cáo một số vấn đề. – Housefly
Xem câu hỏi SO này: [Android: Cách tải xuống Tệp từ máy chủ và lưu tệp đó vào thư mục cụ thể trong sdcard] (http://stackoverflow.com/questions/16117067/androidhow-to-download-the-file- thư mục từ máy chủ-và-lưu-thư-cụ-cụ-riêng) –