从android sdcard文件中删除带有问号文本的黑色钻石

时间:2016-01-29 11:34:53

标签: java android json listview special-characters

我正在使用json数据创建列表视图。当用户离线时,我想在listview中显示数据。我已将json数据存储在android sdcard中。当用户离线并在listview中显示时,我会检索数据。问题是,当我从目录中读取文件时,它会显示带有问号的黑色菱形并将其存储在数组列表中。这种类型的"����t��*"我的问题是如何从Arraylist中删除这种类型的字符串。有人请帮忙

保存数据:

 public  void saveMyData()
{
    try {
        ObjectOutput out = new ObjectOutputStream(new FileOutputStream(new File(getFilesDir(),"")+"cachefile.txt"));
        out.writeObject(al.toString());
        Toast.makeText(getApplicationContext(), "Data Saved..",Toast.LENGTH_LONG).show();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这是我的检索代码。

String fileContent = "";
    try {
        String currentLine;
        BufferedReader bufferedReader;
        FileInputStream fileInputStream = new FileInputStream(getFilesDir()+"cachefile.txt");
        bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream,"UTF-8"));


        while ((currentLine = bufferedReader.readLine()) != null) {
            fileContent += currentLine + '\n';
        }

        bufferedReader.close();
    } catch (IOException e) {
        e.printStackTrace();

        Log.d("FAILED","THOS IS NULL");
        fileContent = null;
    }
    Log.d("SUCESS","SUCESS BUDDYY"+fileContent);

1 个答案:

答案 0 :(得分:1)

从广义上讲,问题是您使用ObjectOutputStream将数据写入文件,但BufferedReader将其重新读入。ObjectOutputStream是专门设计用于允许将对象和本机数据类型写入流中,以便可以通过ObjectInputStream读回来以相同方式重新构建对象。这种编码不是人类可读的,通常包含额外的字符作为字段分隔符。

我不知道al是什么,但由于您在编写之前调用toString(),我可以假设您希望在文件中找到实际字符串,您可以阅读。为此,您可能希望使用PrintStreamPrintStream.println()方法而不是ObjectOutputStream