Wątek przeniesiony 2015-07-01 15:56 z Java przez bogdans.

otworzenie pliku po jego zapisaniu

0

Witam
Kiedy pierwszy raz odpalam program wyświetla mi zawartość pliku, prosi o napisanie czegoś, zatwierdzam Enterem i nic się nie dzieje. Kiedy zatrzymuję prgram ręcznie i próbuję otworzyć plik .txt plik się zawiesza (działam na linuksie więc widzę na ikonce że plik się teoretycznie zapisał). Kiedy próbuję jeszcze raz go odpalić otrzymuję błąd.

 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:3332)
	at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137)
	at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121)
	at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:569)
	at java.lang.StringBuffer.append(StringBuffer.java:369)
	at java.io.BufferedReader.readLine(BufferedReader.java:370)
	at java.io.BufferedReader.readLine(BufferedReader.java:389)
	at rw.wsz.Czytanie(wsz.java:33)
	at rw.Rw.main(Rw.java:26)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
 package rw;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class wsz {
    
  String czytanie = "";
  FileReader czt = null;
  Scanner scanner = new Scanner(System.in);
  String pisanie = "";
  FileWriter pis = null;
  
  public void Otwieranie()throws IOException {
   
   try{
   czt = new FileReader("doCzytania.txt");
         }
   
   catch(FileNotFoundException e){
   System.out.println("nie mozna odnaleźć pliku");
   System.exit(1);
   }
   }
  
   public void Czytanie()throws IOException {
   
   BufferedReader bufferedReader = new BufferedReader(czt);
   
   try{
       while((czytanie = bufferedReader.readLine())!= null)
           System.out.println(czytanie);
   }
catch (IOException e){
System.out.println("błąd przy odczycie");
System.exit(1);
}
}
   
public void Pisanie()throws IOException {
//BufferedReader bufferedReader = new BufferedReader(czt);
FileWriter fileWriter = new FileWriter("doCzytania.txt");
System.out.println("napisz cos");
pisanie = scanner.next();

try{
while(pisanie != null)
   fileWriter.write(pisanie);
fileWriter.close();
System.out.println("zapisano");
System.exit(1);
}

catch (IOException e) {
System.out.println("błąd zapisu");
System.exit(1);
}
}
}
2

Nigdy nie przestajesz zapisywać do tego pliku, spójrz na pętlę.

0

Kiedy zatrzymuję prgram ręcznie

Nie zatrzymuj to skończy się miejsce na dysku :D Skoro nie przypisujesz nic nowego do stringa pisanie to on się sam z siebie na nulla nie zmieni. To nie jest mechanika kwantowa - wielokrotne czytanie danej zmiennej nie wpływa na jej stan.

0

faktycznie teraz działa. Natomiast zastanawia mnie jeszcze jedna rzecz. Jak zmodyfikować kod aby dopisywał coś do istnięjącego tekstu a nie go zamieniał? użyć innej funkcji do zapisu czy w obecnej coś zmienić? W chwili obecnej po wciśnięciu Entera program się zatrzymuje. Czy można zamienić funkcje entera aby zamiast zatrzymywać przechodził do kolejnej lini?

0

Jesli chcesz dopisywac, zmien konstruktor FileWriter, dodaj drugi parametr true

0

Jak zmodyfikować kod aby dopisywał coś do istnięjącego tekstu a nie go zamieniał?

Zacznij od siegania do dokumentacji.
https://docs.oracle.com/javase/8/docs/api/java/io/FileWriter.html

Czy można zamienić funkcje entera aby zamiast zatrzymywać przechodził do kolejnej lini?

Przecież to ty tak napisaleś że się zatrzymuje. Jak napiszesz żeby przechodził do kolejnej linii to tak będzie robił...

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