将字符串写入文件只写...字节数组地址?

时间:2014-04-20 19:06:04

标签: java android file bytearray

我有一个非常奇怪的问题。我想在文件中写一些东西(实际上是String)。我像往常一样将它转换为字节数组,将其写入文件中......只有类似的内容:[B@42928da8。无论我写什么,字符串有多大,否则,我不会得到一些不同的东西。我在想这是阵列的一个地址,但它是如何实现的?

按下“保存”按钮时调用的功能。

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 = "";
    }
}

奇怪也是为什么会改变。这是不是意味着文件在阅读过程中被保存了?

Edit2:我刚刚发现文件本身(用root文件浏览器读取)是正常写入的,所以问题必须在阅读过程中。

1 个答案:

答案 0 :(得分:0)

我之前遇到过类似的问题。修复它的原因并不是直接将content.getBytes()直接调用到write方法中,而是首先确保它被标记为字节数组,然后通过FileOutputStream进行写入。

String n_content = (String)content;
byte[] bContent = n_content.getBytes;
fos.write(bContent);

如果此操作无效,我相信您的openFileOutput()未返回正确的FileOutputStream实例。