JAVA FileWriter.write(); nie zapisuje


(pain3hp) #1
BufferedReader in = new BufferedReader(new FileReader("tekst.txt"));

        String inputLine;


        StringBuilder sb = new StringBuilder();

        while ((inputLine = in.readLine()) != null)

        sb.append(inputLine).append("\n");



        File plik = new File("strona.txt");

        FileWriter fw = new FileWriter(plik);

        fw.write(sb.toString());

        in.close();

        System.out.println(sb.toString());

Pliki istnieją, strona.txt ma chmody 777, konsola wyrzuca string z pliku wczytywanego. Plik strona.txt mimo tego jest pusty. WHY?


(Juszczyk Pawel) #2

Zamknij FileWritera.


(pain3hp) #3

działa jednak gdy wejscie jest zczytywane ze strony www przez klase URL(pośrednio) to ponad połowa lini jest zapisana mimo braku zamkniecia FW, potrafisz to wyjaśnić?


(Juszczyk Pawel) #4

Oczywiście, że potrafię. Pisząc do FileWritera tak naprawdę piszesz do jakiegoś bufora (pamięci operacyjnej, bufora JVM, bufora sprzętowego, pliku bezpośrednio zmapowanego w pamięci operacyjnej, opcji jest bardzo dużo) i dopiero przy zamknięciu / flushu dane są bezpośrednio zapisywanie w pliku. Widocznie w przypadku klasy URL przenoszenie danych z bufora do pliku odbywa się częściej (powodem może być więcej danych, mniejszy rozmiar bufora). System operacyjny jest odpowiedzialny za zwolnienie tych zasobów, których nie zwolnił zakończony proces. System operacyjny zwykle nic nie wie o lokalnych buforach, dlatego w najlepszym przypadku tylko część danych zostaje fizycznie zapisana.

Widać, że nie za dużo masz do czynienia z low - level :stuck_out_tongue:


(pain3hp) #5

czaje, dzieki low-level - nie dla mnie, może kiedyś