2016-04-12 6 views
1

Ich versuche, eine Datei der Größe 1024 zu generieren. Der Code ist unten angegeben.Erstellen Sie eine Testdatei der Größe 1024 Bytes mit Java

import java.security.*; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.BufferedWriter; 


public class GenerateFile { 
    public static void main(String[] args) { 
    SecureRandom random = new SecureRandom(); 
    byte[] array = new byte[1024]; 
    random.nextBytes(array); 

    for(byte i = 0; i<array.length; i++) { 
     System.out.println(bytes[i]); 
    } 
    try { 
     File file = new File("testfile"); 
     FileWriter out = new FileWriter(file); 
     out.write(bytes); 
     System.out.println("Done .........."); 
     out.close(); 

    if (file.createNewFile()){ 
     System.out.println("File is created!"); 
     } 

    else { 
     System.out.println("File already exists."); 
     } 

    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
} 

Dies ist der Fehler, den ich bekomme. Ich verstehe nicht, wie ich hier ein Byte-Array verwenden kann. Wiederum möchte ich, dass die Dateigröße 1024 Byte beträgt.

GenerateFile.java:20: error: no suitable method found for write(byte[]) 
     out.write(bytes); 
     ^
method Writer.write(int) is not applicable 
    (argument mismatch; byte[] cannot be converted to int) 
method Writer.write(char[]) is not applicable 
    (argument mismatch; byte[] cannot be converted to char[]) 
method Writer.write(String) is not applicable 
    (argument mismatch; byte[] cannot be converted to String) 
method OutputStreamWriter.write(int) is not applicable 
    (argument mismatch; byte[] cannot be converted to int) 

Vielen Dank!

Antwort

3

Writer und Reader sind für das Schreiben von nicht binärem Text konzipiert. Ich schlage vor, Sie verwenden FileOutputStream für Binärdateien.

// to fill with random bytes. 
try (FileOutputStream out = new FileOutputStream(file)) { 
    byte[] bytes = new byte[1024]; 
    new SecureRandom().nextBytes(bytes); 
    out.write(bytes); 
} 

Alternativ können Sie auch folgendes verwenden, vorausgesetzt, dass jedes Zeichen in ein Byte umgewandelt wird.

try (FileWriter out = new FileWriter(file)) { 
    char[] chars = new char[1024]; 
    Arrays.fill(chars, '.'); 
    chars[1023] = '\n'; 
    out.write(chars); 
} 
+1

Wie kann ich es mit Zufallszahlen anstelle von "." ? –

+0

@ Y.V verwenden Sie 'Random.nextBytes' wie Sie in Ihrer Frage getan haben. –

+0

@ Y.V Per Definition ist Text nicht zufällig, so dass nur Binär sinnvoll ist. –