我正在使用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());
}
答案 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" />
也许这就是问题