我想我大概知道问题是什么,但不完全确定。寻找类似的解决方案,但只有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");