我想将文件保存到SD卡中,我使用时间戳,所以如果已经有一个同名的文件没有被替换 这是我的代码
public void onClick(View v) {
// TODO Auto-generated method stub
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
mExternalStorageAvailable = mExternalStorageWriteable = false;
}
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'/'HHmm");
String timestamp = dateFormat.format(new Date());
String filename = "_" + timestamp + ".txt";
File myFile = new File(Environment.getExternalStorageDirectory(), "Preposisi Removal/PreposisiRemoval");
myFile.getParentFile().mkdir();
myFile.createNewFile();
FileOutputStream FOut = new FileOutputStream(myFile+filename);
OutputStreamWriter myOutWriter =
new OutputStreamWriter(FOut);
myOutWriter.append(tv.getText());
myOutWriter.close();
FOut.close();
Toast.makeText(getBaseContext(), "Save Files Successful", Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
e.printStackTrace();
Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
button = (Button) findViewById(R.id.button7);
button.setOnClickListener (this);
}
但是当我运行它时,我得到toast信息" / mnd / sdcard / Preposisi删除/ PreposisiRemoval_20140117 / 0633.txt:打开失败:ENOENT(没有这样的文件或目录)
我猜是因为没有文件夹" Preposisi删除" 那么如果文件夹不存在,如何自动创建文件夹呢?
或者我的编码有什么问题吗? 每按一次保存按钮我想保存新文件,而不是覆盖以前的文件
答案 0 :(得分:1)
首先创建目录(如果已经存在,则不会抛出错误):
File directory = new File(Environment.getExternalStorageDirectory(), "Preposisi Removal/");
directory.mkdirs();
然后在该目录中创建文件(使用名称complete with timestamp和suffix):
File myFile = new File(directory, "PreposisiRemoval" + filename); //Changed code
//myFile.getParentFile().mkdir(); //No longer required
myFile.createNewFile();
FileOutputStream FOut = new FileOutputStream(myFile); //Changed code
编辑:
好的,现在我看到了实际问题:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'/'HHmm");
文件名的时间戳部分中有一个'/'。您不能在文件名中使用该字符,因为它表示文件夹或目录。将其更改为其他角色,例如:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'_'HHmm");
您的代码(或我之前建议的更新)应该有效。