problem ze strumieniami

0

Jak zapisac liczbe do pliku uzywajac write int??

to niedziałą

import java.io.*;

public class Pliki 
{
	public static void main(String[] args) 
	{
		

		try{
			DataOutput strumien = new DataOutput("zapis.txt");
			liczba =5;
			strumien.writeInt(liczba);
			
		}
		catch (IOException ex)
		{
				System.out.println("Błąd przy zapisie danych: "+ex);
		}
	}
	private static int liczba;
}

wywala mi :
pliki.java java.io.DataOutput is abstract; cannot be instantiated.
Dopiero zaczynam sie uczyc strumieni. Mozecie mi pomóc?

0
import java.io.*;

class Test {
  public static void main(String args[]) {
    try {
      RandomAccessFile raF;
      int liczba = 5;
      raf = new RandomAccessFile("zapis.dat", "rw");
      raF.seek(0);
      raF.writeInt(liczba);
      raF.close();
    }
    catch (IOException ioE) {
      System.out.println("Blad przy zapisie danych");
    }
  }
}
0

Mam taki problem:
Wczytuje linijke textu poprzez

RandomAccessFile wejscie = new RandomAccessFile("wejscie.txt", "rw");
			wejscie.seek(0);
			wejscietxt = wejscie.readLine();

Potme wyswietlam wartosc zmiennej wejscietxt i wszystko gra. Następnie zapisuje wartosc zmiennej wejscietxt do innego pliku dzieki

RandomAccessFile wyjscie = new RandomAccessFile("wyjscie.txt", "rw");
			wyjscie.writeChars(wejscietxt);

No i niby wszystko ładnie sie kompiluje i uruchamia, ale ja kotwieram plik wyjscie.txt(ten do ktorego zapisałem wartosc zmiennej) to między kazda literka pojawia sie spacja. Dlaczego tak sie dzieje i jak tego uniknąć?

0
samos napisał(a)

Dlaczego tak sie dzieje i jak tego uniknąć?

bo writeChars zapisuje, jak widac po nazwie, char'y a taka zmienna w javie ma 2 bajty i dlatego sa puste miejsca

[dopisane]

Mozesz uzyc:

writeBytes(str + "\r\n") i readLine();

ale bedziesz mial krzaki zamiast polskich znakow

Opcja 2:

write((strs + "\r\n").getBytes()) i readLine();

w pliku sa polskie znaki ale zle je odczytuje

Opcja 3:

import java.io.*;

class Test {
  public static void main(String args[]) {
    String[] strs = {"abc", "śćń", "xyz"};
    try {
      RandomAccessFile rafOut = new RandomAccessFile("plik.txt", "rw");
      for (int i = 0; i < strs.length;) rafOut.write((strs[i++]).getBytes());
      rafOut.close();
      byte[] buf = new byte[3];
      RandomAccessFile rafIn = new RandomAccessFile("plik.txt", "r");
      for (int i = 3; i > 0; i--) {
        rafIn.read(buf);
        System.out.println(new String(buf));
      }
      rafIn.close();
    }
    catch (IOException ioE) {
      System.out.println("Blad IO");
    }
  }
}

co dziala dobrze ale jest nieporeczne

Opcja najlepsza:

import java.io.*;

class Test {
  public static void main(String args[]) {
    String[] strs = {"abc", "śćń", "xyz"};
    try {
      RandomAccessFile rafOut = new RandomAccessFile("plik.txt", "rw");
      for (int i = 0; i < strs.length;) rafOut.writeUTF(strs[i++]);
      rafOut.close();
      RandomAccessFile rafIn = new RandomAccessFile("plik.txt", "r");
      for (int i = 3; i > 0; i--) System.out.println(rafIn.readUTF());
      rafIn.close();
    }
    catch (IOException ioE) {
      System.out.println("Blad IO");
    }
  }
}
0

Mam kolejny problem:

Zapisuje wartosci zmiennych w 2 linijkach. Wszystko pieknie działa ale nie wiem jak odczytac druga linijke

import java.io.*;

public class Pliki 
{
	public static void main(String[] args) 
	{
		//zapis
		try
		{
			PrintWriter zapis = new PrintWriter(new FileOutputStream("zapis.txt"));
			zapis.println(dane);
			zapis.print(dane2);
			zapis.print(dane3);
			zapis.close();

		}
		catch (IOException ex)
		{
				System.out.println("Błąd przy odczycie danych: "+ex);
		}

		//odczyt
		try
		{
			RandomAccessFile wejscie = new RandomAccessFile("zapis.txt", "r");
			dlugoscpliku = "zapis.txt".length();
			System.out.println("dlugosc pliku :" + dlugoscpliku);
			wskaznik=0;
			wejscie.seek(0);
			while (wskaznik < dlugoscpliku)
			{
				
				text = wejscie.readLine();
				wczytane = text;	
				wskaznik= wejscie.getFilePointer();
				
			}
			wejscie.close();

			
			System.out.println("Wczytane wyrazy :" + wczytane);
			System.out.println("polozenie wskaznika :" + wskaznik);
	    }
		catch (IOException ex)
		{
				System.out.println("Błąd przy zapisie danych: "+ex);
		}




	}
	private static String dane = "zmienna jeden";
	private static String dane2 = "zmienna dwa ";
	private static String dane3 = "zmienna trzy";
	private static String text;
	private static String wczytane;
	private static long dlugoscpliku;
	private static long wskaznik;

}

Ten kod niedziała. Skoro length() zwraca dlugosc pliku w bajtach a getFilePointer() zwraca aktualne polozenie wskaźnika, to czemu dlugosc pliku jest wartoscia mniejsza niz położenie wskaznika :| [???] . I czy rzeczywiście te strumienie sa takie pokręcone czy tylko mi sprawiają one takie trudności? I jaki wg. was jest najwygodniejszy strumien do zapisywania Stringów w kilku linijkach(sam plik moze być nieczytelny po otwarciu). Wyczytałem ze strumieni jest ok 60 [!!!] .

No i chce zaznaczyc ze mam książke "Core Java Podstawy" i staram sam się rozwiazywać swoje problemy, ale te strumienie sprawiaja mi duże problemy dlatego tak czesto o nie wypytuje. Niemyślcie ze czekam na gotowizne bo tak nie jest)

0
samos napisał(a)

Ten kod niedziała. Skoro length() zwraca dlugosc pliku w bajtach a getFilePointer() zwraca aktualne polozenie wskaźnika, to czemu dlugosc pliku jest wartoscia mniejsza niz położenie wskaznika :| [???] .

jak przypisujesz do zmiennej 'dlugoscpliku' dlugosc stringa z jego nazwa to sie nie dziw ;)

samos napisał(a)

I czy rzeczywiście te strumienie sa takie pokręcone czy tylko mi sprawiają one takie trudności? I jaki wg. was jest najwygodniejszy strumien do zapisywania Stringów w kilku linijkach(sam plik moze być nieczytelny po otwarciu). Wyczytałem ze strumieni jest ok 60 [!!!] .

Trzeba poczytac dokumentacje i beda calkiem proste, a co do zapisu i odczytu plikow tekstowych to chyba najprosciej bedzie tak:

import java.io.*;

class Test {
  public static void main(String[] args) {
    //zapis
    String[] lines = {"pierwsza linia", "druga linia", "trzecia linia"};
    try {
      BufferedWriter bW = new BufferedWriter(new FileWriter("plik.txt"));
      for (int i = 0; i < lines.length; i++) {
        bW.write(lines[i]);
        bW.newLine();
      }
      bW.close();
    }
    catch (IOException ioE) {
    }
    //odczyt
    String line;
    try {
      BufferedReader bR = new BufferedReader(new FileReader("plik.txt"));
      while ((line = bR.readLine()) != null) {
        System.out.println(line);
      }
      bR.close();
    }
    catch (IOException ioE) {
    }
  }
}

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