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
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