0

これは、データをファイルに書き込む方法です

FileOutputStream fos = openFileOutput("ThisWeekDatabase", Context.MODE_PRIVATE);
String Line;
while ((Line = thisWeekReader.readLine()) != null) {
        fos.write(Line.getBytes()); 
}
fos.close();

これは、同じファイルを読み取ろうとしている方法です

FileInputStream fIn = openFileInput ("ThisWeekDatabase") ;
InputStreamReader isr = new InputStreamReader ( fIn ) ;
BufferedReader buffreader = new BufferedReader ( isr ) ;
String Line;
while ((Line = buffreader.readLine ()) != null ) {
    if (Line.contains("xyz")){
        doSomething();
    }
}
isr.close ( ) ;

しかし、私は得ていますjava.io.FileNotFoundException

4

2 に答える 2

0
if (CONDITION) {
    final CountDownLatch latch = new CountDownLatch(1);
    Thread thread = new Thread() {

        @Override
        public void run() {
            try {
                saveDataFromWeb();// here i write data into a file
            } catch (Throwable e) { // CATCH THROWABLE ??!! WHY ?
                AlertDialog.Builder builder = new AlertDialog.Builder(
                        findViewById(R.id.viewpager).getContext());
                StringWriter sw = new StringWriter();
                PrintWriter pw = new PrintWriter(sw);
                e.printStackTrace(pw);
                sw.toString();
                builder.setMessage(sw.toString());
                AlertDialog alert = builder.create();
                alert.show();
            } finally {
                latch.notify();
            }
        }
    };
    thread.start();
    latch.await();
    parseData("ThisWeekDatabase"); // here I read the data from the
    parseData("NextWeekDatabase");
}

新しい行については:

while ((line = thisWeekReader.readLine()) != null) {
    fos.write((line + "\n").getBytes());
}

\n単なるハックです-Windowsを使用している場合、またはこれ\r\nをお読みください

編集:ラッチを機能させることができない場合:

thread.start();
try {
    thread.join();
} catch (InterruptedException e) {
    // TODO handle
}
parseData("ThisWeekDatabase"); // here I read the data from the
parseData("NextWeekDatabase");
于 2013-05-04T01:37:40.477 に答える
0
Thread thread = new Thread() {

    @Override
    public void run() {
        try {
            saveDataFromWeb();// here i write data into a file
        } catch (Throwable e) {
            AlertDialog.Builder builder = new AlertDialog.Builder(
                    findViewById(R.id.viewpager).getContext());
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            sw.toString();
            builder.setMessage(sw.toString());
            AlertDialog alert = builder.create();
            alert.show();
        }
    }
};
if (CONDITION) {
    thread.start();
    parseData("ThisWeekDatabase"); // here I read the data from the 
    parseData("NextWeekDatabase");
}

エラーが見つかりました。これらのファイルを読み取ろうとすると、スレッドの作業 (Web からファイルへのデータの書き込み) が完了していないためです。ここで、スレッドが必要なときにファイルの書き込みを終了するように、スレッドを「待機」する方法がparseData(xyz)必要です。

また、ファイルにデータを書き込む方法またはファイルからデータを読み取る方法のいずれかが間違っています。以前に書き込んだファイルを読み取ると、複数の短い行ではなく、1 つの長い行が表示されるためです。

私は得る

div.lvsdrt {background-color:#e3f1ff; border-top:black 1px dotted;padding:0.1em;}div.lvwer{background-color:#f2f9ff;border-top:black 1px dotted;padding:0.1em;}div.nobreak {page-break-inside:avoid;}

代わりに

div.lvsdrt {
    background-color:#e3f1ff;
    border-top:black 1px dotted;
    padding:0.1em;
}
div.lvwer {
    background-color:#f2f9ff;
    border-top:black 1px dotted;
    padding:0.1em;
}
div.nobreak {
    page-break-inside:avoid;
}
于 2012-10-05T19:55:16.020 に答える