menulis file .json dan membaca file itu di Android

Saya sedang menulis file .json dan saya ingin membaca file itu, tetapi masalahnya adalah, ketika saya mencoba membaca seluruh file sebagai string, ia menambahkan spasi sebelum dan sesudah setiap karakter dan hanya karena karakter tambahan ia tidak dapat membaca json.

format JSON adalah

[{"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."}]

tetapi memberikan respons yang aneh seperti: [ { " d e s c r i p t i o n 1 " : " T h e .....

untuk memangkas spasi tambahan saya mengacu pada ini, tetapi masih tidak berhasil: Java cara mengganti 2 spasi atau lebih dengan spasi tunggal dalam string dan menghapus spasi di depan saja

saya menggunakan kode ini

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();

string "respons" berisi respons aneh

jadi adakah yang bisa membantu saya?

untuk menulis ke dalam file, saya menggunakan:

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

person SML    schedule 08.01.2013    source sumber
comment
BufferedReader memiliki metode readLine. Cobalah untuk menggunakannya.   -  person Mikita Belahlazau    schedule 08.01.2013
comment
Bisakah Anda memposting kode yang Anda gunakan untuk menulis file? Sepertinya Anda menulis karakter dalam format 16-bit.   -  person vaughandroid    schedule 08.01.2013
comment
Coba buka file tersebut dan lihat apakah isinya mengandung spasi atau karakter yang tidak terlihat atau tidak. Coba juga masuk untuk melihat apa yang dikembalikan dalam numRead dan readData untuk setiap iterasi. Hal ini untuk membatasi dan memastikan masalahnya berasal dari membaca, bukan menulis.   -  person RobGThai    schedule 08.01.2013
comment
@RobGThai, saya menulis menggunakan writeChars, yang mengarah ke penulisan spasi sebelum setiap karakter, sekarang saya menggunakan writeUTF dan masalah terpecahkan. terima kasih semua telah berbagi pendapat mereka.   -  person SML    schedule 09.01.2013


Jawaban (4)


writeChars menulis setiap karakter sebagai dua byte.

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.
person auselen    schedule 09.01.2013

Tulis metode di bawah ini untuk Menulis File Json, Di sini params adalah Nama File dan mJsonResponse adalah Respon Server.

Untuk Membuat File ke dalam Memori Internal Aplikasi

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();
    }
}

Untuk Membaca Data Dari File Json, Ini params adalah Nama File.

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();
    }
}
person Dipak Keshariya    schedule 09.01.2013

Saya suka jawaban di atas dan diedit: Saya hanya suka berbagi jadi saya telah membagikannya semoga bermanfaat bagi orang lain.

Salin dan Tempel kelas berikut dalam paket Anda dan gunakan seperti:

Simpan: MyJSON.saveData(context, jsonData);

Baca: String json = MyJSON.getData(context);

import android.content.Context;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;

/**
 * Created by Pratik.
 */
public class MyJSON {

    static String fileName = "myBlog.json";

    public static void saveData(Context context, String mJsonResponse) {
        try {
            FileWriter file = new FileWriter(context.getFilesDir().getPath() + "/" + fileName);
            file.write(mJsonResponse);
            file.flush();
            file.close();
        } catch (IOException e) {
            Log.e("TAG", "Error in Writing: " + e.getLocalizedMessage());
        }
    }

    public static String getData(Context context) {
        try {
            File f = new File(context.getFilesDir().getPath() + "/" + fileName);
            //check whether file exists
            FileInputStream is = new FileInputStream(f);
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            return new String(buffer);
        } catch (IOException e) {
            Log.e("TAG", "Error in Reading: " + e.getLocalizedMessage());
            return null;
        }
    }
}
person Pratik Butani    schedule 06.11.2015

Kode tulisan Anda adalah masalahnya. Gunakan saja

FileWriter fos = new FileWriter(mypath);
fos.write(response);
person Henry    schedule 09.01.2013