12

私は.jsonファイルを書いていて、そのファイルを読みたいのですが、問題は、ファイル全体を文字列として読み込もうとすると、すべての文字の前後にスペースが追加され、余分な文字のためにjsonを読み込めないことです。

Json形式は

[{"description1":"The ThinkerA bronze sculpture by Auguste Rodin. It depicts a man in sober\nmeditation battling with a powerful internal struggle.","description2":"Steve JobsFounder of Apple, he is widely recognized as a charismatic pioneer of\nthe personal computer revolution.","description3":"Justin BieberBorn in 1994, the latest sensation in music industry with numerous\nawards in recent years."}]

しかし、それは次のようなおかしな応答を返します: [ { " description 1 " : " T he .....

余分なスペースを削除するには、これを参照しましたが、まだ機能しませんでした: Java 文字列内の 2 つ以上のスペースを単一のスペースに置き換え、先頭のスペースのみを削除する方法

このコードを使用しています

File folderPath = Environment.getExternalStorageDirectory();
File mypath=new File(folderPath, "description.json");
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader = null;
reader = new BufferedReader(new FileReader(mypath));
char[] buf = new char[1024];
int numRead=0;

while((numRead=reader.read(buf)) != -1)
{
    String readData = String.valueOf(buf, 0, numRead);
    fileData.append(readData);
    buf = new char[1024];
}
String response = fileData.toString();

「応答」文字列に奇妙な応答が含まれています

誰でも私を助けることができますか?

ファイルに書き込むために、次を使用します:

FileOutputStream fos = new FileOutputStream(mypath);
DataOutputStream dos = new DataOutputStream(fos);
dos.writeChars(response);
4

4 に答える 4

24

以下に Write Json File のメソッドを記述します。これはparamsファイル名でmJsonResponseあり、サーバーの応答です。

アプリケーションの内部メモリにファイルを作成する場合

public void mCreateAndSaveFile(String params, String mJsonResponse) {
    try {
        FileWriter file = new FileWriter("/data/data/" + getApplicationContext().getPackageName() + "/" + params);
        file.write(mJsonResponse);
        file.flush();
        file.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Json ファイルからの読み取りデータの場合、paramsファイル名は次のとおりです。

public void mReadJsonData(String params) {
    try {
        File f = new File("/data/data/" + getPackageName() + "/" + params);
        FileInputStream is = new FileInputStream(f);
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        String mResponse = new String(buffer);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
于 2013-01-09T06:03:24.493 に答える
7

writeChars は、各文字を 2 バイトとして書き込みます。

http://docs.oracle.com/javase/6/docs/api/java/io/DataOutputStream.html#writeChars(java.lang.String )

http://docs.oracle.com/javase/6/docs/api/java/io/DataOutputStream.html#writeChar(int )

Writes a char to the underlying output stream as a 2-byte value, high byte first. If no exception is thrown, the counter written is incremented by 2.
于 2013-01-09T05:23:21.577 に答える
1

あなたの書くコードが問題です。使用するだけ

FileWriter fos = new FileWriter(mypath);
fos.write(response);
于 2013-01-09T05:35:31.557 に答える