2016-12-28 77 views
0

我想为Android编写一个应用程序,并且需要从服务器保存resposne,我设法将它保存在此路径中的txt文件中:在Android中保存文件的正确路径

String path= "/storage/emulated/0/Android/data/com.example.simone.pizzino/files/response.txt"; final File file = new File(path);

在我的朋友的手机上测试它不能在该路径中看到该文件夹​​,他的路径类似data/data/"packageName",它不适用于Android Studio中的模拟器。 我的手机是运行7.1库存ROM的Nexus 5X。 我的朋友植根于6.1。 是否有某种方法可以获取应用程序文件夹的动态路径,而无需将其作为常量声明?

对不起,如果这个问题已经被问到,但我councln't找到我的问题的解决方案。

+0

我不确定你认为“应用程序文件夹”是什么。您的硬编码路径与'Context'(例如“Activity”或“Service”)上调用的'getExtenalFilesDir(null)'的输出极其相似。除此之外,请详细解释**“什么是不起作用”的意思。 – CommonsWare

+0

我不明白你为什么使用硬编码路径?你可以简单地将文件保存在内部存储中https://developer.android.com/training/basics/data-storage/files.html – petrumo

+0

他的应用程序的目录与我的不同,他的内容类似于数据/数据/包裹名字。应用程序无法将文件保存在该位置,因为它无法找到它。 – Facosenpai

回答

3

第一件事OU要做的就是添加权限访问您的清单文件

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

保存在内部存储

File file = new File(context.getFilesDir(), filename); 
String filename = "myfile"; 
String string = "Hello world!"; 
FileOutputStream outputStream; 

try { 
outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
outputStream.write(string.getBytes()); 
outputStream.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

public File getTempFile(Context context, String url) { 
    File file; 
try { 
    String fileName = Uri.parse(url).getLastPathSegment(); 
    file = File.createTempFile(fileName, null, context.getCacheDir()); 
} catch (IOException e) { 
    // Error while creating file 
} 
return file; 
} 

保存文件的文件上的外部存储

外部存储
/* Checks if external storage is available for read and write */ 
public boolean isExternalStorageWritable() { 
String state = Environment.getExternalStorageState(); 
if (Environment.MEDIA_MOUNTED.equals(state)) { 
    return true; 
} 
return false; 
} 

/* Checks if external storage is available to at least read */ 
public boolean isExternalStorageReadable() { 
String state = Environment.getExternalStorageState(); 
if (Environment.MEDIA_MOUNTED.equals(state) || 
    Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
    return true; 
} 
return false; 
} 

public File getAlbumStorageDir(String albumName) { 
// Get the directory for the user's public pictures directory. 
File file = new File(Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_PICTURES), albumName); 
if (!file.mkdirs()) { 
    Log.e(LOG_TAG, "Directory not created"); 
} 
return file; 
} 
+0

在Android 6上而更新的权限模型已经改变。 –