我正在从网址下载文件并将其保存在手机记忆库中。下载显示成功,但我无法在手机上查看该文件。我认为这是因为保存文件的位置以:
开头/data/user/0/
并且只有root有权访问它。我只需要将它保存在手机的内存中。我的代码是:
package com.example.abhijeet.mockapp;
import android.Manifest;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Path;
import java.nio.file.Paths;
public class MainActivity extends AppCompatActivity {
private ProgressDialog pDialog;
EditText mEditText;
String text;
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = (EditText) findViewById(R.id.edit_text);
}
public void downloadFile(View view) {
verifyStoragePermissions(MainActivity.this);
new DownloadFileFromURL().execute(
"FILE URL HERE");
}
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
class DownloadFileFromURL extends AsyncTask<String, String, String> {
long total;
/**
* Before starting background thread
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
System.out.println("Starting download");
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Loading... Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* Downloading file in background thread
*/
@Override
protected String doInBackground(String... f_url) {
int count;
try {
String root = Environment.getExternalStorageDirectory().toString();
System.out.println("Downloading");
URL url = new URL(f_url[0]);
URLConnection conection = url.openConnection();
conection.connect();
// getting file length
int lenghtOfFile = conection.getContentLength();
// input stream to read file - with 8k buffer
InputStream input = new BufferedInputStream(url.openStream(), 8192);
// Output stream to write file
// File out = new File("test.txt");
String filename = "test.txt";
Context context = MainActivity.this;
File file = new File(context.getFilesDir(), filename);
FileOutputStream outputStream;
try {
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
byte data[] = new byte[1024];
total = 0;
while ((count = input.read(data)) != -1) {
total += count;
// writing data to file
outputStream.write(data, 0, count);
}
outputStream.close();
} catch (Exception e) {
}
// text = output.toString();
// text = MainActivity.this.getFilesDir().getAbsolutePath();
text = file.getAbsolutePath().toString();
// flushing output
// closing streams
input.close();
return text;
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
return "error";
}
}
/**
* After completing background task
**/
@Override
protected void onPostExecute(String file_url) {
if (file_url.equals(text)) {
System.out.println("Downloaded");
Toast.makeText(MainActivity.this, "DOWNLOAD SUCCESSFUL", Toast.LENGTH_LONG).show();
mEditText.setText(text);
} else
Toast.makeText(MainActivity.this, "DOWNLOAD FAILED", Toast.LENGTH_LONG).show();
pDialog.dismiss();
}
}
}
答案 0 :(得分:0)
使用此路径将文件保存在下载目录
中Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
答案 1 :(得分:0)
您可以添加此方法,并在每次需要获取用于保存/检索文件的目录时调用:
public static File getDirectory(Context context) {
ContextWrapper cw = new ContextWrapper(context);
return cw.getDir("myDir", Context.MODE_PRIVATE); // path to data/user/0/<app_package>/myDir/
}
答案 2 :(得分:0)
从String filename =&#34; test.txt&#34 ;;更改您的文件名到
String filename = Environment.getExternalStorageDirectory().toString() + "/" + "test.txt";