我正在尝试从具有用户名和密码的php get url下载文件。我的代码没有显示任何错误,进度条显示文件已下载,但当我尝试在日志中打印列表时,我看不到该文件。我做错了什么?
doInBackground
中AsyncTask
部分内的onCreate
部分内的代码,我已在protected String doInBackground(String... sUrl) {
InputStream input = null;
OutputStream output = null;
HttpURLConnection connection = null;
try{
URL url = new URL(sUrl[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
int fileLength = connection.getContentLength();
input = connection.getInputStream();
output = new FileOutputStream(context.getFilesDir()+"video.m3u");
byte data[] = new byte[4096];
long total = 0;
int count;
while ((count = input.read(data)) != -1){
total = total + count;
if (fileLength > 0){
publishProgress((int) (total * 100 / fileLength));
}
output.write(data, 0, count);
}
}catch (Exception e){
return e.toString();
}finally {
try{
if (output != null){
output.close();
}
if (input != null){
input.close();
}
}catch (IOException ignored){
}
if (connection != null){
connection.disconnect();
}
}
return "";
}
内调用,并将url放在参数内。
onPostExecute
在if (result.equals("")){
String path = context.getFilesDir().toString();
Log.d("Files", "Path: "+ path);
File directory = new File(path);
File[] files = directory.listFiles();
Log.d("Files", "Size: " + files.length);
for (int i = 0; i<files.length; i++){
Log.d("Files", "File Name: " + files[i].getName());
}
}
部分,我编写了此代码
D/Files: Path: /data/data/my.app.package/files
D/Files: Size: 1
D/Files: File Name: instant-run
但我印刷的唯一一件事是:
guzzleHttp
我无法看到已下载的文件。
答案 0 :(得分:0)
您要保存的文件路径错误。现在你要保存到
output = new FileOutputStream(context.getFilesDir()+"video.m3u");
需要output = new FileOutputStream(context.getFilesDir().getAbsolutePath()+"/video.m3u");
希望这会有所帮助。
答案 1 :(得分:0)
我认为问题在于这一行
output = new FileOutputStream(context.getFilesDir()+"video.m3u");
context.getFilesDir()不返回String,它需要执行此文件对象
output = new FileOutputStream(context.getFilesDir()..getAbsolutePath()+"/video.m3u");