2017-06-02 8 views
-1

OK、ランダムtxtファイルを生成する次のコードが見つかりました。基本的には、MapReduceの単語カウントシミュレーションを実行するために、いくつかの空白で区切られたランダムな単語が必要です。Javaでおおよそのサイズのランダムなtxtファイルを作成します。

import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Random; 

public class MainClass { 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 


     try{ 
      PrintWriter writer = new PrintWriter("bigfile.txt", "UTF-8"); 


      Random random = new Random(); 
      for(int i = 0; i < 23695522; i++) 
      {   
       char[] word = new char[random.nextInt(8)+3]; // words of length 3 through 10. (1 and 2 letter words are boring.) 
       for(int j = 0; j < word.length; j++) 
       { 
        word[j] = (char)('a' + random.nextInt(26)); 
       } 
       writer.print(new String(word) + ' '); 

       if (i % 10 == 0){ 
        writer.println(); 
       } 
      } 


      writer.close(); 
     } catch (IOException e) { 
      // do something 
     } 

    } 

} 

は、今私は、ファイルが約事前に定義された大きさを持つようにするために必要なだけ反復を持つために、このコードを少し変更したいです。したがって、すべての反復では、2バイトごとに約6.5文字(一様な選択による)が生成されます。だから、私はバイトで必要なファイルのサイズを(6.5 * 2)で割って、結果をループの繰り返し回数として設定し、予想よりもはるかに小さいファイルを取得します。

+0

* "each of 2 bytes" *? UTF-8でエンコードされたテキストファイルで、各文字が2バイト長であると思われる理由は何ですか?あなたのテキストはすべてASCIIなので、UTF-8で1バイト長です。 * 2バイトの長さにするには、文字セット "UTF-16"を使用します。 – Andreas

答えて

2
import java.io.File; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Random; 

public class MainClass { 


public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    long count=0; 
    try{ 

     File file = new File("bigfile.txt"); 
     PrintWriter writer = new PrintWriter(file, "UTF-8"); 


     Random random = new Random(); 
     for(int i = 0; i < 23695522; i++) 
     {   
      char[] word = new char[random.nextInt(8)+3]; // words of length 3 through 10. (1 and 2 letter words are boring.) 
      count+=word.length; 
      for(int j = 0; j < word.length; j++) 
      { 
       word[j] = (char)('a' + random.nextInt(26)); 

      } 
      writer.print(new String(word) + ' '); 
      count+=1; 
      if (i % 10 == 0){ 
       writer.println(); 
       count+=2; 

      } 
     } 


     writer.close(); 
    } catch (IOException e) { 
     // do something 
    } 




    System.out.println(count); 

} 

}

、このいずれかを試してみてください。改行文字は2バイトで、その他は1バイトです。

0

バイト数をカウントして適切なバイト数になるまで繰り返しますか?

int writtenBytes = 0; 
do{ 
    String randomWords = ....; 
    writtenBytes += randomWords.getBytes(StandardCharsets.UTF_8).length; 
    writer.print(randomWords); 
}while(writtenBytes < 123456); 
関連する問題