文件组合器没有获得相同的输出

时间:2017-12-10 14:10:24

标签: java file makefile

我正在尝试制作一个程序,在从一个文件中删除它们的副本后合并了2个文本文件(我有2个问题和答案列表,并希望从两个文件中获得所有问题)但是当我使用以下内容时编码问题不要像以前那样保持分类,以便根据该行对应答案。

import java.util.Scanner;
import java.io.File;
import java.util.List;
import java.util.LinkedList;
import java.nio.file.Files.*;
import java.nio.file.Paths;
import java.nio.file.*;
import java.util.Set;
import java.util.HashSet;
import java.nio.charset.Charset;

class Main{

    public static List fileToList(String path){

        Scanner scanner = openFile(path);
        List<String> list = loadFile(scanner);
        closeFile(scanner);

        return list;
    }

    public static Scanner openFile(String path){ 

        Scanner scanner = null;

        try{    
            scanner = new Scanner(new File(path),"ISO-8859-1"); 

        }catch(Exception e){ e.printStackTrace(); }

        return scanner;
    }

    public static List loadFile(Scanner scanner){

        List<String> list = new LinkedList<String>();

        while(scanner.hasNextLine()){
            list.add(scanner.nextLine());
        }

        return list;
    }

    public static void closeFile(Scanner scanner){
        scanner.close();
    }

    public static Set fileCombiner(List<String> list1 , List<String> list2){

        for(int i = 0; i < list1.size(); i++){
            for(int c = 0; c < list2.size(); c++){

                if(list1.get(i).equals(list2.get(c))){

                    if(list1.size() > list2.size())
                        list1.remove(i);
                    else
                        list2.remove(c);
                }

            }
        }

        //COMBINING TRIMMED FILES

        Set<String> set1 = null;

        if(list1.size() > list2.size()){
            list1.addAll(list2);
            set1 = new HashSet<String>(list1);
        }
        else{
            list2.addAll(list1);
            set1 = new HashSet<String>(list2);
        }


        return set1;
    }

    public static void main(String args[]){

        Scanner input = new Scanner(System.in);

        System.out.print("Enter name of file 1: ");
        String name1 = input.next();

        System.out.print("Enter name of file 2: ");
        String name2 = input.next();

        String path1 = name1 + ".txt";
        String path2 = name2 + ".txt";

        List<String> list1 = fileToList(path1);
        List<String> list2 = fileToList(path2);

        Set set1 = fileCombiner(list1,list2);

        Charset ISO_8859_1 = Charset.forName("ISO-8859-1");

        try{
            Files.write(Paths.get("GENERATED.txt"),set1,ISO_8859_1);
        }catch(Exception e){}

    }
}

1 个答案:

答案 0 :(得分:0)

HashSets中的元素可以混乱地排序 使用LinkedHashSet而不是HashSet,因为此类保持插入顺序。

另见:
https://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html