Dateien öffnen und Binärausgeben

Jatoll

Bekanntes Mitglied
Hallo,
wir haben hier die Aufgabe das LempelZivWelch verfahren zu programmieren. Aber ich find das rein auf Text ein bisschen langweilig und hatte nun folgende Idee: Man müsste doch eine Datei öffnen können, binär einlesen und dann das LZW drüber laufen lassen können oder klappt das nicht?
dann könnte ich alle dateien kompriemieren und nicht nur Texte.
Dummerweise hab ich weder ahnung wie man so ein "datei-such-browser" schreibt noch wie man das binär ausliest bzw. später wieder zurückschreibt in die datei beim dekompriemieren ^^

kann mir da jemand helfen?
 
Dateien einlesen sollte mit einem FileReader gehen. Beim Auslesen von Bytes bin ich mir nicht sicher, hab ich noch nie gemacht, aber da gibt es sicher irgendeinen InputStream (Ausgaben dann eben mit einem OutputStream).
Was meinst du mit "Datei-such-Browser"? Soll die Datei erst noch gesucht weren? ???:L
 
ok aber ich kenn die ganzen sachen nicht ... die gui mit dem datei-browser krieg ich noch noch ... mit InputStream hab ich noch nie gearbeitet... wird das dann automatisch binär eingelesen?
 
Reader und InputStreams werden oft aneinandergehängt, z.B. hat man einen BufferedReader, der kriegt nen FileReader, der kriegt n File etc.

Hab grad mal mit FileInputStream rumgespielt, vielleicht hilft es dir ein bisschen, um die Funktionsweise zu verstehen.
Java:
public static void main(String[] args) throws Exception {
	FileInputStream fis = new FileInputStream(new File(
		"/pfad/zur/datei"));
	while(fis.read() != -1) {
		System.out.println(fis.read());
	}
}

Für dein Beispiel ist der von mir beschriebene FileReader tatsächlich ungeeignet, FileInputStream von SlaterB sollte es besser tun.
 
@Haave
das ist aber ein ziemlich ungünstiges Beispiel, da fehlt der Buffer, jedes read() führt vielleicht zu einem langsamen Festplattenzugriff,
und in deiner Schleife wird jedes zweite Byte geprüft, die andere Hälfte ausgegeben, zu 50% wird am Ende -1 ausgegeben
 
ok also erstmal zum dateiaufrufen... da hab ich das hier gefunden:
Getting and Setting the Selected File of a JFileChooser Dialog : JFileChooserSwingJava Tutorial
hab mir die ersten drei punkte da mal angeguckt und ausprobiert und irgendwie machen die alle das gleiche... weiß nicht genau welchen ich da nehmen soll
da kommt dann auch so ein fenster und man kann auswählen ... aber die ganze sache mit den inputstreams hab ich immer noch nicht so richtig verstanden...
 
Zuletzt bearbeitet:
erklärt wird es hier auch kaum werden, FArt hat einen Link gepostet,
in anderen Lehrbüchern kannst du genauso 2-30 Seiten durchlesen, das ist grundsätzlich ein größeres Thema,

bei einzelnen konkreten Verständnisfragen oder Fehler in Programmen wäre dann wieder das Forum geeignet
 
Okay, vielleicht sollte man keinen Code posten von Sachen, die man gerade selbst das erste Mal ausprobiert hat 😀 😳
 
ok dann versuch ichs mal dreist, weil ichs heute bestimmt nicht mehr verstehen werde: kann mir jemand da nen code schnell zusammen schustern der ahnung davon hat?... einfach nur dateichooser aufrufen und dann in binär einlesen ... mehr brauch ich ja nicht 😳
 
Java:
import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;

public class FileChooserDialog {
  public String FileChooserDialoger() {
    JFileChooser fileopen = new JFileChooser();
    FileFilter filter = new FileNameExtensionFilter("c files", "c");
    fileopen.addChoosableFileFilter(filter);

    int ret = fileopen.showDialog(null, "Open file");

    if (ret == JFileChooser.APPROVE_OPTION) {
      File file = fileopen.getSelectedFile();
      System.out.println(file);
    }
    System.out.println(fileopen.getLocation());
	return fileopen.getSelectedFile().getPath();
  }
}

ist das so ok?
 
in welcher Hinsicht, InputStream ist da schließlich nicht dabei,

allgemein bemängele ich eine großgeschriebene Methode (immer klein schreiben!),
ob der Filter funktioniert kann ich pauschal nicht sagen, ansonsten glaube ich aber dass diese Methode sinnvoll einsetzbar ist,

so, das wars aber als menschlicher Compiler 😉
 
zu binär:
du wirst eine datei nicht in 1 und 0 angezeigt kriegen, das macht auch keinen sinn, was du siehst sind zeichen die aus bytes bestehen, ein byte besteht aus 8bit, jeder bit kann 1 oder 0 sein, durch die art der ausgabe wird bestimmt, was du siehst, ob du jetzt bei einer jpeg datei ein bild siehst, oder ganz viele (sonder) zeichen ist interpretationssache des ausgabeprogramms, da strings grundsetzlich lesbare zeichen sind siehst werden bei dir auch diese ausgegeben.
Bsp.:
wenn du einen Buchstaben "A" als string anschaust siehst du eben ein A
als int : 65
und binär wäre das dan wohl : 01000001
---
Gespeichert ist auf deiner Festplatte alles binär, angezeicht wird es fast immer als bild, zeichen, zahl, ....
 

Zurück
Oben