6

txtファイルのデータを一部修正。提案されたコードを試しましたが、この形式で txt ファイルに再度書き込むことができませんでした。collection.sort を試しましたが、長い行にデータを書き込みます。

私のtxtファイルには次のデータが含まれています:

Monday
Jessica  Run      20mins
Alba     Walk     20mins
Amy      Jogging  40mins
Bobby    Run      10mins
Tuesday
Mess     Run      20mins
Alba     Walk     20mins
Christy  Jogging  40mins
Bobby    Run      10mins

これらのデータを昇順で並べ替え、並べ替え後に txt ファイルに再度保存するにはどうすればよいですか?

Monday
Alba     Walk     20mins
Amy      Jogging  40mins
Bobby    Run      10mins
Jessica  Run      20mins
Tuesday
Alba     Walk     20mins
Bobby    Run      10 mins
Christy  Jogging  40mins
Mess     Run      20mins
Jessica  Run      20mins
4

8 に答える 8

17

これが私が思いついたものです:

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

public class Sort {

    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new FileReader("fileToRead"));
        Map<String, String> map=new TreeMap<String, String>();
        String line="";
        while((line=reader.readLine())!=null){
            map.put(getField(line),line);
        }
        reader.close();
        FileWriter writer = new FileWriter("fileToWrite");
        for(String val : map.values()){
            writer.write(val);  
            writer.write('\n');
        }
        writer.close();
    }

    private static String getField(String line) {
        return line.split(" ")[0];//extract value you want to sort on
    }
}
于 2009-04-11T23:23:14.087 に答える
6
package com.myFiles;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;

public class FilesReaderWriter {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = null;
        PrintWriter outputStream = null;
        ArrayList<String> rows = new ArrayList<String>();

        try {
            reader  = new BufferedReader(new FileReader("Input.txt"));
            outputStream = new PrintWriter(new FileWriter("Output.txt"));

            String file;
            while ((file = reader .readLine()) != null) {
                rows.add(file);
            }
            Collections.sort(rows);
            String[] strArr= rows.toArray(new String[0]);
            for (String cur : strArr)
                outputStream.println(cur);
        } finally {
            if (reader  != null) {
                inputStream.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }

}
于 2013-06-29T08:43:34.610 に答える
5

最初の単語のみをソートしているので、これはかなり怠惰な方法です。

    ArrayList<String> rows = new ArrayList<String>();
    BufferedReader reader = new BufferedReader(new FileReader("input.txt"));

    String s;
    while((s = reader.readLine())!=null)
        rows.add(s);

    Collections.sort(rows);

    FileWriter writer = new FileWriter("output.txt");
    for(String cur: rows)
        writer.write(cur+"\n");

    reader.close();
    writer.close();
于 2009-04-11T23:37:01.527 に答える
3

使用sort:

aaron@ares ~$ sort data.txt 
Alba     Walk     20mins
Amy      Jogging  40mins
Bobby    Run      10mins
Jessica  Run      20mins

aaron@ares ~$ sort data.txt > sorted.txt
aaron@ares ~$ cat sorted.txt
Alba     Walk     20mins
Amy      Jogging  40mins
Bobby    Run      10mins
Jessica  Run      20mins

...または使用python

aaron@ares ~$ python -c "import sys; print ''.join(sorted(sys.stdin))" < data.txt > sorted.txt
aaron@ares ~$ cat sorted.txt 
Alba     Walk     20mins
Amy      Jogging  40mins
Bobby    Run      10mins
Jessica  Run      20mins
于 2009-04-11T22:58:23.803 に答える
2

Name 、 Action 、および length の 3 つのパラメーターを含むクラスを用意します。

読み取り用にファイルを開き、単語ごとに読み取り、クラスの新しいインスタンスを作成し、適切な値を入力してから、そのインスタンスをコレクションに挿入します。

独自の sort メソッドを作成するか、(より適切なオプション) Java ソート関数のいずれかを使用して、コレクションをソートします。

書き込み用に別のファイルを開き、並べ替えたコレクションを同じ方法で書き込みます。

上記のアクションをコードに変換できない場合は、本「Core JAVA」を購入してよく読んでください。または、ここの誰かが寛大で完全なコードを提供してくれることを願っています。:)

于 2009-04-11T23:02:36.650 に答える
2
import java.io.*;
import java.util.*;

public class Sort1 {
    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new FileReader("fileToRead.txt"));
        Map<String, String> map=new TreeMap<String, String>();
        String line="";
        while((line=reader.readLine())!=null){
                map.put(getField(line),line);
        }
        reader.close();
        BufferedWriter writer = new BufferedWriter(new FileWriter("fileToWrite1.txt"));
        for(String val : map.values()){
                writer.write(val);      
                writer.newLine();
        }
        writer.close();
    }

    private static String getField(String line) {
        return line.split(" ")[0];//extract value you want to sort on
    }
}
于 2010-10-02T16:39:15.797 に答える
0

そのファイルに恐ろしい量のデータがない場合は、次のようなことを試してください。

すべてのコンテンツを

String s = <<file contents>>;

String[] strings = s.split(<<here comes lovely regex something like \w+\s\w+\s\w>>);

Arrays.sort(strings);

for (String str : strings) {
  write  str  to your output file;
}

しかし、私は疲れすぎて、もっと賢明なことを提案できません....

于 2009-04-11T23:04:02.073 に答える