【问题标题】:Android Saving a file to internal memory works while to Sd card failsAndroid 将文件保存到内部存储器有效,而保存到 SD 卡失败
【发布时间】:2012-05-16 00:41:31
【问题描述】:

我有一个需要保存文件的 Android 应用。 我这样创建文件:

FileOutputStream fOut = openFileOutput(fileName, 
                    MODE_WORLD_READABLE);
            osw = new OutputStreamWriter(fOut);

我是这样打开的:

FileInputStream srcFileStream = openFileInput(fileName);

这适用于内部存储器文件。 我在我的应用程序中添加了一个偏好,用户可以在其中选择将文件保存到 sd 卡。 我试试这个命令:

if (Prefs.getCard(this))
        fileName="/sdcard/"+fileName;

意思是如果 Prefrences 是 yes,我在文件名前面添加“/sdcard/”。 其余代码保持不变,

这似乎不起作用,因为我得到一个异常:

File /sd/file1 contains a path seperator

我如何使用相同的代码来保存到 SD 卡和内存中,只需要像上面尝试的那样做一些小的修改?

【问题讨论】:

  • 您必须以普通的旧 Java 方式打开流。 Context 的文件操作不允许子目录,只能在你的内部应用目录中工作
  • 当我这样做时,我得到:打开失败:EACCES(权限被拒绝)

标签: android file file-io sd-card


【解决方案1】:

这应该可行..

String baseDir = "";
String fileName = "myFile.txt";
FileOutputStream fOut = null;
if (Prefs.getCard(this)) {
    baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
    File file = new File(baseDir + fileName);
    fOut = new FileOutputStream(file)
}  else {
    fOut = openFileOutput(fileName, MODE_WORLD_READABLE);
}
if (fOut != null) {
    osw = new OutputStreamWriter(fOut);
    ...
}

【讨论】:

  • 这给了我 sd 路径?但是内部呢?我需要一个解决方案
  • 不,它给出了路径 /mt/sd/filename 而内部是别的东西。
  • 是的,这就是我最后所做的
【解决方案2】:

你肯定没有忘记在清单中添加正确的权限...

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

您也可以尝试使用以下方式访问外部路径:

Environment.getExternalStorageDirectory();

我已经看到不同的外部路径名,具体取决于设备...

【讨论】:

    【解决方案3】:

    Edit 被 Sevens 击败:

    你可以试试这样的:

    File f = Environment.getExternalStorageDirectory(); 
    String fullfilename = f.getAbsoluteFile() + "/Android/data/NameOfApp/fileshere/" ;
    
    File folderToWrite = new File(fullfilename);
    folderToWrite.mkdirs();
    
    File fileToWrite = new File(fullfilename,"filename.txt");
    

    【讨论】:

    • 我不明白,文件路径是到SD还是到内部?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2015-06-15
    • 2017-07-12
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多