我在访问我在应用程序中创建的文件时遇到问题。已经浏览了互联网上所有可能的建议,但我仍然无法访问这些文件。
- 我正在使用有根电话
- 我正在将文件写入三星 Galaxy Nexus 上的外部存储
- DDMS 会看到创建的文件,但每当我尝试提取它们时,它都会显示:
[2013-06-25 11:45:26 - ddms] 传输错误:没有这样的文件或目录
[2013-06-25 11:45:26] 拉取选择失败:没有这样的文件或目录
但是,这些文件在 DDMS 中是可见的,是的,我已经尝试在左侧的设备资源管理器中选择手机和包
当我以 root 身份打开 adb shell 时:
苏
cd存储/sdcard0
然后我都输入了
chmod 777 我的包
和
chmod -R 777 myPackage
但它仍然不会更改我写入此目录的文件的权限。另外 chmod 777 直接对 myPackage 目录中的文件不起作用并返回:没有这样的文件或目录。
不用说,我无法从 shell 上方提取文件。
这是我用来生成文件的代码。
protected void onHandleIntent(Intent arg0) {
ArrayList<String> parameters = new ArrayList<String>();
String fileName;
File file;
File parameterFile;
//generate data containing general information about the device
//retrieve the data from the intent
parameters=arg0.getStringArrayListExtra("com.example.mypackage.parameters");
for(int i = 0; i < parameters.size(); ++i)
{
parameter = parameters.get(i);
String[] split = parameter.split(" ");
String name=split[1];
fileName = name + ".csv";
//check the state of the external storage
String state = Environment.getExternalStorageState();
Log.e("DIR: ", "STATE: " + Environment.getExternalStorageState());
//return info if the storage is read-only
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))
{Log.e("DIR: ", "STATE: READ_ONLY");}
final File parametersDir = new File(Environment.getExternalStoragePublicDirectory("myPackage"), "Parameters");
parametersDir.mkdirs();
parameterFile = new File(parametersDir, fileName);
parameterFile.setExecutable(true);
generateTextFile(parameterFile, parameter);
//check file's permissions
parameterFile.setExecutable(true, false);
parameterFile.setReadable(true, false);
parameterFile.setWritable(true, false);
boolean executable = parameterFile.canExecute();
boolean readable = parameterFile.canRead();
boolean writable = parameterFile.canWrite();
if(!executable){Log.e("FILE: ", "File cannnot be executed.");}
if(!readable){Log.e("FILE: ", "File cannnot be read.");}
if(!writable){Log.e("FILE: ", "File cannnot be written to.");}
}
这是我用来生成文件的方法
private void generateTextFile(File file, String string)
{
try {
FileOutputStream stream = new FileOutputStream(file);
try{
FileWriter writer = new FileWriter(file);
writer.append(string);
writer.flush();
writer.close();
String path = file.getPath();
Log.e("Directory: ", path);
}
catch (IOException e)
{
Log.e("FILE: ", "Cannot create filewriter. Writer problem.");
}
finally
{
stream.getFD().sync();
stream.flush();
stream.close();
}
}
catch(IOException e)
{
Log.e("FILE: ", "Cannot write to file. Stream problem.");
}
}
根据日志,一旦我的文件被写入,即使我将它们设置为可读、可写和可执行,它们的权限仍然没有改变
为了消除疑虑,我也在清单中声明了
使用权限 android:name="android.permission.WRITE_EXTERNAL_STORAGE"
使用权限 android:name="android.permission.READ_EXTERNAL_STORAGE"
我已经到了我真的不知道下一步该怎么做的地步,所以如果有人能提供帮助,我会非常高兴。