1

我在访问我在应用程序中创建的文件时遇到问题。已经浏览了互联网上所有可能的建议,但我仍然无法访问这些文件。

  • 我正在使用有根电话
  • 我正在将文件写入三星 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"

我已经到了我真的不知道下一步该怎么做的地步,所以如果有人能提供帮助,我会非常高兴。

4

0 回答 0