24. juni 2003 - 21:51
Der er
22 kommentarer og 1 løsning
Hive bytes ud af en ArrayList og samle dem.
Jeg sidder for sjov og leger med filer... Jeg har læst en fil ind med en FileReader og gemmer 1000 bytes af gangen som et byte array, i en arraylist... er der nogen der kan/vil vise mig hvorledes jeg kan "samle" filen igen. Altså hive plads 0 i arraylisten ud (1000b) og skrive dem via en FileWriter, herefter hive de næste 1000 bytes ud og skrive dem osv... --------------For at give en bedre ide om hvad jeg snakker om så har jeg her postet koden der gemmer bytes i en arraylist: public SaveFile(File f) { FileInputStream fis; try { fis = new FileInputStream(minFil); int n; byte[] b = new byte[1000]; while((n = fis.read(b)) >= 0) { arrayList.add(b); } } catch(Exception e) { } } Mvh Casualty
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
Jeg ved godt at det er en lidt pudsig opgave..men den er god til at lære mig lidt om filer osv...
Jeg kan ikke rigtigt se hvad du skal skal bruge den ArrayList til, hvorfor ikke bare appende til en StringBuffer ?
Logikken er vel ikke engang helt korrekt, fordi du gemmer ikke n, d.v.s. at hvis n < 1000 så ved du ikke hvor meget at byte arrayet der er validt.
Det virker ellers...Jeg prøvede med filer under 1000 byte og skrev kun den første plads i arraylisten ud...Derefter havde jeg en valid fil..
Ok...Skulle jeg så appende byte efter byte til en stringbuffer?
Jeg tænkte nok mere på: sb.append(new String(b, 0, n));
Hm. Og den skrev ikke 1000 bytes ud til filen ?
Oki...Jeg prøver lidt videre..
Jo det har du ret i...Jeg så det ikke da det bare var en .txt og der stod det i den som der skulle
24. juni 2003 - 22:15
#10
Er dit problem at hive ud af din arrayList ? gør: Iterator iter=arrayList.iterator(); while(iter.hasNext()) { System.Object obj=iter.next(); }
24. juni 2003 - 22:16
#11
Alternativt: - find filens størrelse - alloker et byte array af den størrelse - brug read(b, ix, b.length - ix)
24. juni 2003 - 22:16
#12
Ok næste spørgsmål...Hvodan får jeg så skrevet fra Stringbufferen ud til en fil igen??
24. juni 2003 - 22:17
#13
Ja det kunne jeg også prøve..
24. juni 2003 - 22:19
#14
Du kan konvertere tilbage fra StringBuffer til byte[] med sb.toString().getBytes() !
24. juni 2003 - 22:20
#15
Ok tak
24. juni 2003 - 22:22
#16
Jeg kan ikke lave at byteArray med længden på filen da denne er en long??
24. juni 2003 - 22:24
#17
Tak Disky...Men problemet var mere at få det hele hægtet sammen med min filewriter
24. juni 2003 - 22:24
#18
Cast den til en int.
24. juni 2003 - 22:25
#19
Hvis den er så stor at den ikke kan være i en int, så løber du nok alligevel tør for memory ! :-)
24. juni 2003 - 22:42
#20
3 stykker kode: import java.io.*; public class CopyManyWays { public static void main(String[] args) { copy1("c:\\tst0.fil", "c:\\tst1.fil"); copy2("c:\\tst0.fil", "c:\\tst2.fil"); copy3("c:\\tst0.fil", "c:\\tst3.fil"); } public static void copy1(String fnm1, String fnm2) { try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fnm1)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fnm2)); byte[] b = new byte[1000]; int n; while((n = bis.read(b)) >= 0) { bos.write(b, 0, n); } bis.close(); bos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return; } public static void copy2(String fnm1, String fnm2) { File f = new File(fnm1); int n = (int)f.length(); byte[] b = new byte[n]; try { InputStream is = new FileInputStream(fnm1); OutputStream os = new FileOutputStream(fnm2); is.read(b); os.write(b); is.close(); os.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return; } public static void copy3(String fnm1, String fnm2) { try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fnm1)); OutputStream os = new FileOutputStream(fnm2); byte[] b = new byte[1000]; int n; StringBuffer sb = new StringBuffer(); while((n = bis.read(b)) >= 0) { sb.append(new String(b, 0, n)); } bis.close(); os.write(sb.toString().getBytes()); os.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return; } }
24. juni 2003 - 22:43
#21
og et svar
24. juni 2003 - 22:45
#22
Det er bare fedt...Jeg kigger lige på din kode...Jeg fik det til at virke med et byteArray. 1000 Tak for hjælpen
24. juni 2003 - 22:47
#23
Der er ikke noget specielt ved min kode. Det er bare det samme som jeg allerede har fortalt bare i komplet kode form.
Kurser inden for grundlæggende programmering