我有一个非常奇怪的问题。我想在文件中写入一些内容(实际上是String
)。我像往常一样将其转换为字节数组,并将其写入文件中。。。只有这样写的东西:CCD_ 2。不管我写什么,那根绳子有多大,或者其他什么,我都不会有什么不同。我认为这是数组的地址,但它是如何到达那里的?
按下"保存"按钮时调用的功能。
public void saveNote(View view){
String FILENAME;
String content;
FILENAME = editText_name.getText().toString();
content = editText_note.getText().toString();
if (FILENAME.equals("LISTOFALLNOTES") || FILENAME.equals("TMP")){
if(requestdecision(getString(R.string.note_warning)))
{
}
else
return;
}
FileOutputStream fos = null;
try {
fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
showmessage("Fehler beim Erstellen der Datei");
}
try {
fos.write(content.getBytes());
fos.close();
showmessage("Erfolgreich gespeichert!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
showmessage("Fehler beim Schreiben");
}
}
showmessage()
只是一个显示简单信息对话框的函数。
我感谢你的建议。
编辑:我刚刚发现,如果你重新打开通知/文件,输出会发生变化。所以我在这里发布了阅读功能:
public void openNote(View view){
String FileName=editText_name.getText().toString();
if (FileName.equals("LISTOFALLNOTES") || FileName.equals("TMP") || FileName.equals("MAIN_DATA")){
if(requestdecision(getString(R.string.note_warning)))
{}
else
return;
}
editText_note.setText(readNote(FileName).toString());
}
public String readNote(String name){
File file = new File(this.getFilesDir(), name);
int length = (int) file.length();
String contents;
byte[] bytes = new byte[length];
FileInputStream in = null;
try {
in = new FileInputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
showmessage("Datei nicht gefunden");
e.printStackTrace();
contents = "";
}
try {
in.read(bytes);
in.close();
contents=bytes.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
showmessage("Konnte nicht lesen");
e.printStackTrace();
contents = "";
}
}
奇怪的是,这也是为什么会发生变化。这难道不意味着文件是在读取过程中保存的吗?
第二版:我刚刚发现文件本身(用根文件浏览器读取)写得很正常,所以问题一定出在读取过程中。
我以前也遇到过类似的问题。对我来说,修复它的方法不是直接将content.getBytes()
调用到into-write方法中,而是首先确保它被标记为字节数组,然后通过FileOutputStream
进行写入。
String n_content = (String)content;
byte[] bContent = n_content.getBytes;
fos.write(bContent);
如果这种情况停止工作,我相信您的openFileOutput()
没有返回正确的FileOutputStream
实例。