そのため、私のアプリは SOAP サーバーから大きな xml を受け取ります。後で使用するために、これをファイルに保存したいと思います。私はこれを行うことができ、ファイルを読み取ることができました。しかし、結果(読み取り後)は文字化けしたxmlです!xml の後半部分のテキスト (412 文字) の大部分がコピーされ、xml の最後に貼り付けられますが、なぜこれが起こっているのかわかりません。私は、ファイルを書き込む 2 つの方法と、ファイルを読み取る 2 つの方法を試しました。(以下にコードを投稿します)注:xmlは5000〜20000文字と大きいため、メソッドを使用してEclipseがメモリ不足エラーを返さないようにしました。
結論:
-入力 xml ファイルが正しい
-出力 xml ファイルが正しくありません
-2つの保存方法を試しました
-2つの読み取り方法を試しました
-何?!
保存コード 1:
InputStream is = new ByteArrayInputStream(string.getBytes());
FileOutputStream fos = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer))>0){
fos.write(buffer, 0, length);
}
fos.flush();
fos.close();
is.close();
保存コード 2 :
InputStream is = new ByteArrayInputStream(string.getBytes());
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
FileOutputStream fos = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
Log.e("stuff is good", "line: "+line);
sb.append(line);
if (sb.toString().length() > 10000) {
fos.write(sb.toString().getBytes());
fos.flush();
sb = new StringBuilder();
}
}
fos.write(sb.toString().getBytes());
fos.flush();
is.close();
fos.close();
コード 1 を読む:
FileInputStream fis = openFileInput("caca");
int c;
StringBuilder fileContent = new StringBuilder();
while((c=fis.read())!=-1)
{
fileContent.append((char)c);
}
fis.close();
Log.e("TEST TEST", "XML length = "
+String.valueOf(fileContent.length()) );
Log.e("TEST TEST", "XML = "
+fileContent );
コード 2 を読む:
FileInputStream fis;
fis = openFileInput("caca");
StringBuffer fileContent = new StringBuffer("");
byte[] buffer = new byte[1024];
int i =1;
while (fis.read(buffer) != -1) {
fileContent.append(new String(buffer));
Log.v("TEST"+ String.valueOf(i), new String(buffer) );
i++;
}
Log.e("TEST TEST", "XML length = "
+String.valueOf(fileContent.length()) );
Log.e("TEST TEST", "XML = "
+fileContent );
ファイルコードに保存:
File myFile = new File("/sdcard/mysdfile.txt");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter =
new OutputStreamWriter(fOut);
myOutWriter.append(fileContent);
myOutWriter.close();
fOut.close();
Toast.makeText(getBaseContext(),
"Done writing SD 'mysdfile.txt'",
Toast.LENGTH_SHORT).show();
長い投稿で申し訳ありませんが、3日後、私は頭がおかしくなりました。どんな入力でもいいです、ありがとう!