我知道,这个问题已经问了上千遍,但是没有解决方案对我有用。
我只想将数据保存到SD卡上的文件中。
但是首先,这是我的代码:
private static final String TAG="Logmessage";
public void save(){
String state=Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)){
File dir=new File(Environment.getExternalStorageDirectory() + "/NewFolder");
if(!dir.exists()){
if (dir.mkdirs()){
Log.i(TAG,"Dir made");
}else{
Log.i(TAG,"Error: Dir not made");
}
}else{
Log.i(TAG,"Dir already exists");
}
File file=new File(dir,"file.txt");
try {
BufferedWriter bWriter = new BufferedWriter(new FileWriter(file));
bWriter.write("Hello World!");
bWriter.close();
}catch (IOException e){
Log.e("Exception","BufferedWriter");
}
}else{
Log.i(TAG,"External Drive not available");
}
}
当然,我在清单文件中添加了
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
,但是当我运行该应用程序时,日志消息始终为:Logmessage: Dir not made
和Exception: BufferedWriter
。因此,我想清单文件中的条目“无法工作”,因为它甚至无法创建目录?
最佳答案
这段代码非常适合我:
String state = Environment.getExternalStorageState();
File mFileTemp;
if (Environment.MEDIA_MOUNTED.equals(state)) {
//this is like that
//any folder name/you can add inner folders like that/your photo name122412414124.jpg
mFileTemp = new File(Environment.getExternalStorageDirectory()+File.separator+"any folder name"+File.separator+"you can add inner folders like that"
, "your photo name"+System.currentTimeMillis()+".jpg");
mFileTemp.getParentFile().mkdirs();
//then write file
}
else {
mFileTemp = new File(getFilesDir()+"any folder name"+
File.separator+"myphotos")+File.separator+"profilephotos", "your photo name"+System.currentTimeMillis()+".jpg");
mFileTemp.getParentFile().mkdirs();
//then write file
}
您可以使用
File.separator
代替“ /”如果外部不可用,则此代码将默认在内部存储中创建相同的文件夹