如何从同一文件中的其他行中删除一行文件?

时间:2016-04-03 16:03:55

标签: java

我有一个文本文件,格式如下:

字符串1

String1String2

String1String2String3

...

String1Strin2String3 .....字符串(ⅰ)...字符串(n)的

我想删除此文件的某些部分,使其具有以下格式(结果文件):

字符串1

String2的

STRING3

...

的字符串(I)

的字符串(n)的

我试过这个功能,但我的输出文件总是空的:

public static void FileFormatted(String inputFile,String outputFile)
    {
        String FileContent = readFile(inputFile,
                StandardCharsets.UTF_8);
        String[] FileSentences = FileContent.split("[\n]");
        for (int i = 0; i < FileSentences.length; i++)
        {


            StringBuilder builder = new StringBuilder();
               for(int j=1;j<FileSentences.length;j++)
                  {
                   int index= FileSentences[j].indexOf("FileSentences[i]");
                   String temp=FileSentences[j].substring(index);
                   FileSentences[j]=FileSentences[j].replaceAll(temp," ");
                        builder.append(FileSentences[j]+ "\n");
                  }
               writeIntoFile(builder, outputFile, true);

        }


    }
public static void writeIntoFile(StringBuilder stringBuilder,
            String txtFilePath, boolean append) {
        File file = new File(txtFilePath);

        // if file doesn't exists, then create it
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        FileWriter fw;
        try {
            fw = new FileWriter(file.getAbsoluteFile(), append);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(stringBuilder.toString());
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

有人可以帮帮我吗。

2 个答案:

答案 0 :(得分:1)

好的,首先阅读整个文件,一次性是不好的做法。想象一下,你有一个6GB的文件,这意味着当你读取它时需要6GB的RAM来存储该文件。最好逐行读取文件。

因此逻辑的目标将逐行读取。 当我们读到第一行时,我们可以得到它的长度。 当我们读取第二行时,我们知道第一行的长度,这意味着它是我们在第二行的起点。这意味着您可以使用子字符串方法,传递起始位置和结束位置。 并为第3,4行,...... n

重复此逻辑

这样做的好处是你不会浪费内存,只是在文本中存储行的大小。

<强>更新

我已经编写了我之前建议的代码。这是非常基本的,没有验证,所以你需要添加它。但它涵盖了基础知识

public static void main(String[] args) throws IOException {

    FileReader fileReader = new FileReader("test.txt");
      BufferedReader br = new BufferedReader(fileReader);

      int startPosition = 0;
      String line;
      ArrayList<String> items = new ArrayList<String>();
      while((line = br.readLine() ) != null)
      {
          items.add(line.substring(startPosition, line.length()));
          System.out.println(line.substring(startPosition, line.length()));
          startPosition = line.length();

      }

      write("test2.txt", items);
}

public static void write (String filename, ArrayList<String> items) throws IOException{

    BufferedWriter outputWriter = null;
    outputWriter = new BufferedWriter(new FileWriter(filename));

    for (String item : items) {

        outputWriter.write(item);
        outputWriter.newLine();
    }
    outputWriter.flush();  
    outputWriter.close();  
}

答案 1 :(得分:0)

确保孔文件中的模式一致,然后执行以下操作:

{{1}}

你也可以使用正则表达式,但这是可以接受的......