|
| L=E6s og skrivning af fil Fra : NB |
Dato : 09-06-04 15:26 |
|
Hejsa. Er der nogen som kan hjælpe mig med at læse en fil (tekst) og
skrive en fil (binær). Jeg har angivet med [1] samt kommentarer hvor jeg
ønsker at læse fil og med [2] samt kommentarer hvor jeg ønsker skrevet
fil.
/* Indhold af unzip.file:
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<elements>
<element>111</element>
<element>222</element>
<element>333</element>
<element>444</element>
<element>555</element>
</elements>
</root>
*/
import java.util.zip.Deflater;
import java.util.zip.Inflater;
import java.io.*;
public class ZLib {
ByteArrayOutputStream byteArrayOutputStream = new
ByteArrayOutputStream();
// Pak.
public void deflate() {
try {
// [1] HER KUNNE JEG GODT TÆNKE MIG, AT LÆSE FILEN UNZIP.FILE, SOM
// ER ET XML-DOKUMENT (SE FILENS STRUKTUR I ØVERSTE KOMMENTAR).
// HAR FORSØGT MIG MED NEDENSTÅNDE, MEN AF EN ELLER ANDEN MÆRKELIG
// ÅRSAG LÆSES KUN FØRSTE LINJE.
FileReader fileReader = new FileReader("unzip.file");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String fileString = "";
StringBuffer stringBuffer = new StringBuffer();
while ((fileString = bufferedReader.readLine()) != null) {
stringBuffer.append(fileString);
}
/* // BLEV ANVENDT TIL TEST.
fileString =
"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n" +
"<root>\n" +
" <elements>\n" +
" <element>111</element>\n" +
" <element>222</element>\n" +
" <element>333</element>\n" +
" <element>444</element>\n" +
" <element>555</element>\n" +
" </elements>\n" +
"</root>";
*/
byte[] buffer = new byte[5];
Deflater deflater = new Deflater();
// BLEV ANVENDT TIL TEST.
// deflater.setInput(fileString.getBytes());
deflater.setInput(stringBuffer.toString().getBytes());
deflater.finish();
int deflated = 0;
while (!deflater.finished()) {
System.out.println("!deflater.finished");
deflated = deflater.deflate(buffer);
byteArrayOutputStream.write(buffer, 0, deflated);
}
System.out.println("deflater.In: " + deflater.getTotalIn());
System.out.println("deflater.Out: " + deflater.getTotalOut());
System.out.println(byteArrayOutputStream.toString());
deflater.end();
// [2] HER KUNNE JEG GODT TÆNKE MIG AT SKRIVE DET KOMPRIMEREDE
// DATA TIL FIL, MEN JEG HAR IKKE HELT STYR PÅ HVORDAN MAN SKRIVER
// EN BINÆR FIL. HAR FORSØGT MIG MED NOGET, MEN TROR AT DET VAR
// GALT, DA JEG SÅ IKKE KUNNE INDLÆSE FILEN I INFLATE.
}
catch (Exception e) {
e.printStackTrace();
}
}
// Udpak.
public void inflate() {
try {
byte[] buffer = new byte[5];
Inflater inflater = new Inflater();
inflater.setInput(byteArrayOutputStream.toByteArray());
byteArrayOutputStream.reset();
int inflated = 0;
while (!inflater.finished()) {
System.out.println("!inflater.finished");
inflated = inflater.inflate(buffer);
byteArrayOutputStream.write(buffer);
}
System.out.println("inflater.In: " + inflater.getTotalIn());
System.out.println("inflater.Out: " + inflater.getTotalOut());
inflater.end();
System.out.println(byteArrayOutputStream.toString());
}
catch (Exception e) {
e.printStackTrace();
}
}
}
| |
Mads Bahrt (09-06-2004)
| Kommentar Fra : Mads Bahrt |
Dato : 09-06-04 16:43 |
|
NB wrote:
> while ((fileString = bufferedReader.readLine()) != null) {
> stringBuffer.append(fileString);
> }
Fra hoften og uden test, prøv med:
while(bufferedReader.ready()){
stringBuffer.append(bufferedReader.readLine());
}
MVH
Mads
| |
Peter Kjellerup Rasm~ (09-06-2004)
| Kommentar Fra : Peter Kjellerup Rasm~ |
Dato : 09-06-04 21:02 |
|
NB wrote:
> Hejsa. Er der nogen som kan hjælpe mig med at læse en fil (tekst) og
> skrive en fil (binær). Jeg har angivet med [1] samt kommentarer hvor
> jeg ønsker at læse fil og med [2] samt kommentarer hvor jeg ønsker
> skrevet fil.
1) Dette virker fint. Dobbelt check om din fil rent faktisk er tom...
2) Prøv med noget i denne retning:
try {
String fileString = "";
String s = new String();
FileReader fileReader = new FileReader("unzip.file");
BufferedReader bufferedReader = new BufferedReader(fileReader);
while ((fileString = bufferedReader.readLine()) != null) {
s += fileString;
}
System.err.println("string: " + s);
DeflaterOutputStream out = new DeflaterOutputStream(new
BufferedOutputStream(new FileOutputStream("file.gz")));
out.write(s.getBytes(), 0, s.getBytes().length);
out.finish();
out.close();
InflaterInputStream in = new InflaterInputStream(new
BufferedInputStream(new FileInputStream("file.gz")));
int b;
ByteBuffer buf = ByteBuffer.allocate(1000);
String unpack = new String();
while ((b = in.available()) != 0) {
unpack += (char)in.read();
}
System.err.println("read data : " + unpack);
} catch (Exception e) {
e.printStackTrace();
}
-Peter
| |
|
|