将文件保存在应用程序的内存中

时间:2017-02-01 13:10:07

标签: php android

我正在尝试从具有用户名和密码的php get url下载文件。我的代码没有显示任何错误,进度条显示文件已下载,但当我尝试在日志中打印列表时,我看不到该文件。我做错了什么?

doInBackgroundAsyncTask部分内的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

我无法看到已下载的文件。

2 个答案:

答案 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");