Zapis i odczyt binarny pliku
Spis treści
Zadanie
Do pliku daneBinarne.txt zapisz swoje imię, aktualny rok i wynik dzielenia 50/4. Następnie z tego samego pliku odczytaj, ile znajduje się w nim bajtów.
Rozwiązanie
W tym zadaniu korzystać należy z DataInputStream/DataOutputStream lub RandomAccessFile.
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class FileWriter {
public static void main(String[] args) {
RandomAccessFile stream = null;
int readBytesCount = 0;
try {
stream = new RandomAccessFile("daneBinarne.txt", "rw");
} catch (FileNotFoundException e) {
System.out.println("Błąd otwierania strumienia");
}
try {
stream.writeUTF("Dawid");
stream.writeInt(2021); // tutaj można również skorzystać z Java Time API
stream.writeDouble(50 / 4);
stream = new RandomAccessFile("daneBinarne.txt", "rw");
while (stream.read() != -1)
readBytesCount++;
} catch (IOException e) {
System.out.println("Błąd wejścia-wyjścia");
}
try {
stream.close();
} catch (IOException e) {
System.out.println("Błąd zamykania strumeinia");
}
System.out.println("Liczba bajtów wynosi: " + readBytesCount);
}
}
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.
Poniżej znajdziesz archiwalne wpisy z czasów, gdy strona była jeszcze hobbystycznym blogiem.
snt.banzai
Co może być nie tak z poniższym kodem? Przy wykonywaniu programu zwracana wartość bajtów wynosi: "java.io.DataInputStream@..." i dalej jakieś pierdoły. try{ zapisRoku.writeUTF(Integer.toString(podanyRok)); zapisRoku.close(); System.out.print("Ilość bajtów jakie zajmuje zapisany w pliku rok wynosi: "); odczytRoku = new DataInputStream(new FileInputStream("binarne.txt")); while(odczytRoku.read() != -1){ zczytaneBajty++; } System.out.print(odczytRoku); odczytRoku.close();
Dawid Kunert
Spróbuj wyświetlić zczytaneBajty, a nie odczytRoku :) I daj odczytRoku.close(); w bloku try i po tym bloku catch(IOException e){} i powinno być ok.
snt.banzai
Aaaa, dzięki. Tak też myślałem, ze to jakaś oczywista oczywistość, tylko tego nie dostrzegam:)
Łepcio
W pliku .txt mam wszystko wykrzaczone - Dawid Ţ@( W czym problem? Pobierałem nawet Notepad++ i formatowałem w nim plik na UTF-8, ale nic to nie dało..
Dawid Kunert
W tym zadaniu ćwiczyliśmy zapis binarny. W twoim pliku dane zostały zapisane binarnie, czyli jak to powiedziałeś są wykrzaczone :) Aby je odczytać musisz napisać odpowiednią metodę w programie :) Nie jesteś w stanie po normalnym otworzeniu pliku odczytać zawartości.