2011-02-09 12 views
0

私はファイルの内容を読むためにJavaでコードを書いています。しかし、それは1000行以上のファイルではなく、小さなファイル行のために働いています。下記のプログラムで何が起こったのか教えてください。私のプログラムは完全なファイルを読み込まないのはなぜですか?

プログラム:

import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class aaru 
{ 
    public static void main(String args[]) throws FileNotFoundException 
    { 
    File sourceFile = new File("E:\\parser\\parse3.txt"); 
    File destinationFile = new File("E:\\parser\\new.txt"); 
    FileInputStream fileIn = new FileInputStream(sourceFile); 
    FileOutputStream fileOut = new FileOutputStream(destinationFile); 
    DataInputStream dataIn = new DataInputStream(fileIn); 
    DataOutputStream dataOut = new DataOutputStream(fileOut); 

    String str = ""; 
    String[] st; 
    String sub[] = null; 
    String word = ""; 
    String contents = ""; 
    String total = ""; 

    String stri = ""; 
    try 
    { 
     while ((contents = dataIn.readLine()) != null) 
     { 
     total = contents.replaceAll(",", ""); 
     String str1 = total.replaceAll("--", ""); 
     String str2 = str1.replaceAll(";", ""); 
     String str3 = str2.replaceAll("&", ""); 
     String str4 = str3.replaceAll("^", ""); 
     String str5 = str4.replaceAll("#", ""); 
     String str6 = str5.replaceAll("!", ""); 
     String str7 = str6.replaceAll("/", ""); 
     String str8 = str7.replaceAll(":", ""); 
     String str9 = str8.replaceAll("]", ""); 
     String str10 = str9.replaceAll("\\?", ""); 
     String str11 = str10.replaceAll("\\*", ""); 
     String str12 = str11.replaceAll("\\'", ""); 


     Pattern pattern = 
      Pattern.compile("\\s+", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE); 
     Matcher matcher = pattern.matcher(str12); 
     //boolean check = matcher.find(); 
     String result = str12; 
     Pattern p = Pattern.compile("^www\\.|\\@"); 
     Matcher m = p.matcher(result); 
     stri = m.replaceAll(" "); 

     int i; 
     int j; 

     st = stri.split("\\."); 

     for (i = 0; i < st.length; i++) 
     { 
      st[i] = st[i].trim(); 
      /*if(st[i].startsWith(" ")) 
      st[i]=st[i].substring(1,st[i].length);*/ 
      sub = st[i].split(" "); 

      if (sub.length > 1) 
      { 
      for (j = 0; j < sub.length - 1; j++) 
      { 
       word = word + sub[j] + "," + sub[j + 1] + "\r\n"; 

      } 
      } 
      else 
      { 
      word = word + st[i] + "\r\n"; 
      } 
     } 
     } 

     System.out.println(word); 
     dataOut.writeBytes(word + "\r\n"); 

     fileIn.close(); 
     fileOut.close(); 
     dataIn.close(); 
     dataOut.close(); 
    } catch (Exception e) 
    { 
     System.out.print(e); 
    } 
    } 
} 
+0

は、スタックオーバーフローへようこそ!いくつかのコメントや説明をコードに追加して、それに従うのが少し楽になりますか?大きな写真が何であるかは本当にわかりません。 – templatetypedef

+1

あなたの書式設定とインデントはひどいです。そのようなプログラムの流れに従うのはとても難しいことです。コードブロックを常にインデントすることを忘れないでください(例:「{}内のもの」)。 –

+0

また、実際の問題(あなたがどの出力を見ているのか、どの出力を期待しているのか)を説明すると、たくさんのことができます。 –

答えて

3

あなたのコードは、完全なファイルを読まない理由はすぐに明らかではないのですが、ここでは2つのヒントです:

初:完全なラインを読み取るためDataInputStreamを使用しないでくださいが。このよう

BufferedReader reader = new BufferedReader(new InputStreamReader(fileIn, "UTF-8")); 

第二:あなたはどのように知っていない代わりに、(DataInputStream.readLine()のJavaDocので文書化されているように)InputStreamReader(理想的にエンコーディングを提供する)とBufferedReaderであなたのFileInputStreamを包みます例外を処理少なくとも次のようにそのスタックトレースを出力します。

catch(Exception e) 
{ 
    e.printStackTrace(); 
} 
関連する問題