在另一个文件中对txt文件的整数进行排序

时间:2017-02-25 19:44:48

标签: java java.util.scanner filewriter

我必须在另一个名为“file_2.txt”的文件中对名为“file_1.txt”的文件的每个整数进行排序,但是当我编译它时什么都不做。

import java.io.*;
import java.util.Scanner;


public static void main(String[] args){

    try
    {   
    Scanner fileScanner = new Scanner(new File("D:\\file_1.txt"));
    while(fileScanner.hasNextLine()){
        Scanner lineScanner= new Scanner(fileScanner.nextLine());
        while (lineScanner.hasNext() && lineScanner.hasNextInt())
        {
            try{
            FileWriter file=new FileWriter("D:\\file_2.txt");
            BufferedWriter writer=new BufferedWriter(file);
            int s = lineScanner.nextInt();
            writer.write(s);
            writer.newLine();
            writer.close();
            file.close();
            }
            catch(FileNotFoundException e){
            e.printStackTrace();
            }
            catch(IOException e){
            e.printStackTrace();
            }

        }lineScanner.close();

    }fileScanner.close();
}

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

2 个答案:

答案 0 :(得分:0)

您正在为第一个文件的每一行打开一个文件。你不想这样做......

以下是您应该做的事情的概述。

1)将一个文件中的所有数字加载到List中。

List<Integer> numbers = new ArrayList<Integer>();
Scanner fileScanner = new Scanner(new File("D:\\file_1.txt"));
while(fileScanner.hasNextLine()){
    numbers.add(Integer.parseInt(fileScanner.nextLine());
}

2)对数字进行排序

Collections.sort(numbers);

3)将列表写入新文件

try (PrintWriter pw = new PrintWriter(new File("D:\\file_2.txt"))) {
    for (int x : numbers) {
        pw.println(x);
    }
}

答案 1 :(得分:0)

您可以将文件读入HashSet,该文件将自动维护整数排序,然后将其写入另一个文件。

// Hashset maintains the sorted list
Set<Integer> integers = new HashSet<Integer>();
Scanner fileScanner = new Scanner(new File("D:\\file_1.txt"));
while(fileScanner.hasNextLine())
{
    integers.add(Integer.parseInt(fileScanner.nextLine());
}

try (PrintWriter writer = new PrintWriter(new File("D:\\file_2.txt"))) 
{
    for (int integer : integers) 
    {
       writer.println(integer);
    }
}