Почему моя программа не читает полные файлы? - PullRequest
0 голосов
/ 09 февраля 2011

Я написал код на 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);
    }
  }
}

1 Ответ

3 голосов
/ 09 февраля 2011

Не сразу понятно, почему ваш код не читает полные файлы, но вот два совета:

Первый: не используйте DataInputStream для чтения полных строк.Вместо этого оберните ваши FileInputStream в InputStreamReader (в идеале, обеспечивая кодировку) и BufferedReader (как задокументировано в JavaDoc DataInputStream.readLine()):

Примерно так:

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

Второе: когда вы не знаете, как обрабатывать исключение не менее , напечатайте его трассировку стека следующим образом:

catch(Exception e)
{
  e.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...