文件保存到内部存储,而不是SD卡

时间:2017-04-12 15:25:36

标签: java android

我正在使用HTC Desire 610进行Android开发。我按照同样问题的其他答案中的示例,但我的所有文件保存最终都在内部设备存储上,而不是SD卡。手机肯定能识别SD卡,从手机中我可以将文件传输到SD卡。

我尝试将文件路径硬编码到SD卡,我也尝试在没有插入计算机的情况下运行应用程序 - 一切都无济于事。我的应用程序能够将这些文件直接保存到SD卡是非常重要的。有任何想法吗?

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    writeDataToFile("2394872934729348");

}


public void writeDataToFile(String data){
    BufferedWriter bufferedWriter = null;

    String dataOutFileName = Environment.getExternalStorageDirectory().getAbsolutePath()+"/data.txt";

    try{
        bufferedWriter = new BufferedWriter(new FileWriter(dataOutFileName,true));
        bufferedWriter.write(data);
        bufferedWriter.flush();
    }
    catch (IOException e){
        e.printStackTrace();
    }
    finally {
        try {
            if(bufferedWriter != null){
                bufferedWriter.close();
            }
        } catch (IOException e){
            e.printStackTrace();
        }
    }

    MediaScannerConnection.scanFile(this,new String[]{dataOutFileName}, null,null);
}
}

编辑: 我现在正在尝试这个。我得到一个FileNotFoundException,除非我直接写入包文件(com.mypackage等)

    File dataDir = new File("/storage/ext_sd/Data/");
    dataDir.mkdirs();
    File outputFile = new File(dataDir,"data.txt");

    try{
        FileOutputStream fos = new FileOutputStream(outputFile);
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fos);
        outputStreamWriter.write(data);
        outputStreamWriter.close();

    }
    catch (IOException e){
        Log.e("Exception", "File write failed: " + e.toString());
    }

2 个答案:

答案 0 :(得分:1)

要访问外部存储设备上的专用存储目录,请使用 getExternalFilesDirs(),而不是getExternalStorageDirectory()。

它将返回一个包含每个位置条目的数组。阵列中的第一个条目被视为主要外部存储,您应该使用该位置,除非它已满或不可用。有关详细说明,请参阅Android API指南中的Using the External Storage

答案 1 :(得分:0)

您是否在AndroidManifest.xml中为您的应用提供了正确的权限? 如果您还没有这样做,则需要通过将以下行添加到您的Manifest中,为您的应用程序提供写入SD卡的正确权限:

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

也许这就是问题