praca na plikach

0

nie do końca rozumiem jak pracować na plikach
na innym forum przeczytałem,że nie można zamykać tych buferów streamerów itp, ale to z kolei wywołuje błędy w programie, teraz przychodzi mi na myśl że jak nie zamykam tych zmiennych do pracy na plikach, to muszę za każdym użyciem ustawiać wskaźnik buffera(próbowałem nic nie daje, może źle to zrobiłem-funkcja reset na bufferedreaderze) itp, mógłby mi ktoś wytłumaczyć jak prawidłowo pracować z plikami, bo nie wiem czy dobrze rozumiem to zagadnienie
zamykanie pliku wywołuje error IOexception stream closed, a nie zamykanie błędy logiczne

0

Zamykasz BufferedReader'a na samym końcu, kiedy zrobisz już wszystko co chciałeś z plikiem. Jeśli użyjesz metody close() to zwalniane są wszystkie zasoby powiązane z obiektem BufferedReader na którym wywołałeś metodę zamykającą. W związku z czym każde wywołanie funkcji na ww. obiekcie spowoduje wyrzucenie IOException.

Możesz przybliżyć jakie masz błędy logiczne? Najlepiej jeszcze napisz co chcesz zrobić z tym plikiem, wtedy łatwiej będzie coś pomóc.

0
private void read ()
    {
       
        File file s = new File (getFilesDir(),myfile);

        if(file .exists())
        {
            try
            {

                FileInputStream fIn  = openFileInput(myfile);
                InputStreamReader isr  =new InputStreamReader(fIn );
                BufferedReader r = new BufferedReader(isr );
                String reader="";
                int id ;

                while(reader !=null)
                {

                    reader=r.readLine();
                    if(reader==null)break;
                    System.out.println("id: "+reader);
                    id  = Integer.parseInt(reader);
                     
                     
                     System.out.println(id);
                }
                   r.close();
                   isr.close();
                   fIn.close();

            }catch(Exception e){System.out.println(e.toString());e.printStackTrace();}

             
        }
         
    }



    private void write ()
    {
        int id = generateId();
        try
        { 
            File file = new File(getFilesDir(),myfile);
            FileOutputStream fOut  = openFileOutput(myfile,MODE_APPEND);

            OutputStreamWriter osw = new OutputStreamWriter(fOut );
            BufferedWriter bw = new BufferedWriter(osw);

            bw.append((id+"\n") );

              bw.flush();
              bw.close();
              osw.flush();
              osw.close();
              fOut.flush();
              fOut.close();



        }catch(Exception e){
            System.out.println("writing to file: "+e.toString());e.printStackTrace(); }

    }

...
read();
write();
read();
write();
read();
write();

jak zamykam fileoutputstreamery itp to program działa, ale wyrzuca

java.io.IOException: Stream closed

a jeśli ich nie zamykam, to program nie wyrzuca erroru, ale nie działa prawidłowo
(wywołuję te funkcje w programie wielokrotnie)
jak temu zaradzić?

0

usunięcie samego ```
flush()

chyba jak na razie załatwiło sprawę, nie rozumiem tego, ale grunt że działa

1 użytkowników online, w tym zalogowanych: 0, gości: 1