不需要的特殊字符添加到Android保存文件



我想我大概知道问题是什么,但不完全确定。寻找类似的解决方案,但只有c的答案。

我正在给internal storage file写一个字符串值列表。

        OUTSTREAM = saveName.toString() + "," +
                d3S.getText().toString() + "," + d3M.getText().toString() + "," + d3C.isChecked() + "," +
                d4S.getText().toString() + "," + d4M.getText().toString() + "," + d4C.isChecked() + "," +
                d6S.getText().toString() + "," + d6M.getText().toString() + "," + d6C.isChecked() + "," +
                d8S.getText().toString() + "," + d8M.getText().toString() + "," + d8C.isChecked() + "," +
                d10S.getText().toString() + "," + d10M.getText().toString() + "," + d10C.isChecked() + "," +
                d12S.getText().toString() + "," + d12M.getText().toString() + "," + d12C.isChecked() + "," +
                d20S.getText().toString() + "," + d20M.getText().toString() + "," + d20C.isChecked() + "," +
                d100S.getText().toString() + "," + d100M.getText().toString() + "," + d100C.isChecked() + "," +
                dCustS.getText().toString() + "," + dCustND.getText().toString() + "," + dCustM.getText().toString() + "," + dCustC.isChecked();
    Log.d("OUTSTREAM::", "" + OUTSTREAM + ";");
    Log.d("OUTSTREAM Bytes::", "" + OUTSTREAM.getBytes() + ";");
        FileOutputStream fos;
        try {
            fos = openFileOutput(FILENAME, Context.MODE_APPEND); //MODE_APPEND MODE_PRIVATE
            fos.write(OUTSTREAM.getBytes());
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            Toast.makeText(MainActivity.this, "Save FileNotFoundException",Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(MainActivity.this, "Save IOException",Toast.LENGTH_SHORT).show();
        }

LogCat:

08-13 11:33:12.486: D/OUTSTREAM::(1547): NewSave,1,0,true,1,0,true,1,0,true,1,0,true,1,0,true,1,0,true,1,0,true,1,0,true,1,5,0,true;
08-13 11:33:12.486: D/OUTSTREAM Bytes::(1547): [B@52a6507c;

但是当我写入文件时,我的数据在文件末尾添加了额外的特殊字符。

        try{
         fIn = openFileInput("DiceSaves.txt");
         isr = new InputStreamReader(fIn);
         isr.read(inputBuffer);
         data = new String(inputBuffer);
         Toast.makeText(MainActivity.this, "Loaded: " + data, Toast.LENGTH_SHORT).show();

         List<String> lines = Arrays.asList(data.split("n"));
         Object[] aLinesArray = lines.toArray();
         String[] SaveNames = new String[10];
         int n = 0;
         for(int i = 0; i < aLinesArray.length ; i++){
             String line = aLinesArray[i].toString();
             Log.d("i and Line::", "" + i + "," + line + ";");

LogCat:

08-13 11:35:08.766: D/i and Line::(1547): 0,NewSave,1,0,true,1,0,true,1,0,true,1,0,true,1,0,true,1,0,true,1,0,true,1,0,true,1,5,0,true??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????;

我不确定我是否需要添加"n", "rn"或离开它没有,因为我是appending到文件。如果我不需要新行,那么我需要用""或其他东西从最后一个条目开始null文件的末尾…

这是建立在一个新的Geny motion AVD与SGS4 4.4.2每次执行,以确保文件是新鲜的。

不需要的字符没有被添加到文件中,问题在于您读取数据的方式。您没有使用isr.read(inputBuffer)返回的长度。

你所需要做的就是改变

isr.read(inputBuffer);
data = new String(inputBuffer);

int length = isr.read(inputBuffer);
data = new String(inputBuffer, 0, length);

它不会破坏任何东西,但我也不知道为什么你转换你的字符串数组到列表,然后回到数组在这里:

List<String> lines = Arrays.asList(data.split("n"));
Object[] aLinesArray = lines.toArray();

你可以这样写:

String[] aLinesArray = data.split("n");

最新更新