2017-09-14 42 views
1

HIHO家伙, 我写一个简单的应用程序,它应该打开两个txt文件,采取的第一个文件的第一行,然后通过第二个文件中的每一行进行迭代。如果它在第二个文件中找到相同的字符串,则应该使用nextline将此字符串写入outputfile.txt。在完成对第二个文件的循环后,它应该从第一行开始第二行并搜索相同的字符串,如果发现则用nextline写入。 我已经试过了,但它什么也没做,我的意思是它没有把任何文本放到outputfile.txt中,即使我确信有相同的单词。文件的Comparer不结果写入文件

package com.company; 

import java.io.*; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.Scanner; 

public class Main { 

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

    String sourceFileName = "C:\\Users\\Maciej\\IdeaProjects\\spring5webapp\\FileTextChecker\\src\\com\\company\\BootfileRO.txt"; 
    String comparingFileName = "C:\\Users\\Maciej\\IdeaProjects\\spring5webapp\\FileTextChecker\\src\\com\\company\\BootfileSK.txt"; 
    String outputFileName = "C:\\Users\\Maciej\\IdeaProjects\\spring5webapp\\FileTextChecker\\src\\com\\company\\output.txt"; 

    System.out.println("Starting ... "); 



    File file1 = new File(sourceFileName); 
    File file2 = new File(comparingFileName); 
    PrintWriter file3 = new PrintWriter(outputFileName); 

    String line1 = ""; 
    String line2 = ""; 

    Scanner scan1 = new Scanner(file1); 
    Scanner scan2 = new Scanner(file2); 
    while(scan1.hasNextLine()){ 
     line1 = scan1.nextLine(); 
     while(scan2.hasNextLine()){ 
      line2 = scan2.nextLine(); 
      if(line1.equals(line2)){ 
       file3.println(line1); 
      } 
      else{ 
       continue; 
      } 
     } 


    } 
    file3.close(); 





    // Comparer comparer = new Comparer(sourceFileName, comparingFileName, oFN); 
    // comparer.compare(); 


    // CompareByScanner compareBYScanner = new CompareByScanner(sourceFileName, comparingFileName, outputFileName); 
    // compareBYScanner.compare(); 


    } 


} 

说实话,它看起来像“等号”函数找不到相同的字符串,但我相信他们存在。

+3

提示:A)以已知*小*文件开始B)添加跟踪打印以显示*代码正在做什么。和无关的:你只关闭3个文件对象中的1个。 – GhostCat

+0

所以,我已经添加了两个测试文件: 答: AAA BBB CCC B: BBB ZXC QFD 它打印BBB输出,但我不知道为什么它停止。 –

回答

0

这里的问题是,SCAN2从来没有复位,因此对比文件1的第一行后,scan2.hasNextLine()将返回false,因此不比较的任何其他线路。相反,在scan1循环的每次迭代中,将scan2设置为等于一个新的扫描器。这会将其设置为文件的开头。然后,扫描完文件后,关闭扫描仪。新代码:

package test; 

import java.io.*; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.Scanner; 

public class TestMain { 

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

String sourceFileName = "src/output/compare1.txt"; 
String comparingFileName = "src/output/compare2.txt"; 
String outputFileName = "src/output/output.txt"; 

System.out.println("Starting ... "); 



File file1 = new File(sourceFileName); 
File file2 = new File(comparingFileName); 
PrintWriter file3 = new PrintWriter(outputFileName); 

String line1 = ""; 
String line2 = ""; 

Scanner scan1 = new Scanner(file1); 
Scanner scan2; 
while(scan1.hasNextLine()){ 
    line1 = scan1.nextLine(); 
    scan2 = new Scanner(file2); 
    while(scan2.hasNextLine()){ 
     line2 = scan2.nextLine(); 
     System.out.println("Line 1: " + line1 + "\n" + "Line 2: " + line2); 
     if(line1.equals(line2)){ 
      file3.println(line1); 
     } 
    } 
    scan2.close(); 
} 
file3.close(); 





// Comparer comparer = new Comparer(sourceFileName, comparingFileName, oFN); 
// comparer.compare(); 


// CompareByScanner compareBYScanner = new CompareByScanner(sourceFileName, 
comparingFileName, outputFileName); 
// compareBYScanner.compare(); 


} 


} 
+0

谢谢!我在文件中发现了一个错误,并自己找到了解决方案......但是,我非常感谢您的帮助! –

+0

不客气!希望你的项目变得更好! – JPadley