2009-04-11 6 views
4

txt 파일의 일부 수정. 제안 된 코드를 시도했지만,이 형식으로 txt 파일에 다시 쓸 수 없습니다. collection.sort를 시도했지만 긴 줄로 데이터를 씁니다.Java를 사용하여 텍스트 파일의 레코드를 정렬하는 방법은 무엇입니까?

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 파일에 다시 저장 :

내 txt 파일

는 이러한 데이터를 포함? sort를 사용

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 

답변

2

: python

[email protected] ~$ sort data.txt 
Alba  Walk  20mins 
Amy  Jogging 40mins 
Bobby Run  10mins 
Jessica Run  20mins 

[email protected] ~$ sort data.txt > sorted.txt 
[email protected] ~$ cat sorted.txt 
Alba  Walk  20mins 
Amy  Jogging 40mins 
Bobby Run  10mins 
Jessica Run  20mins 

... 또는 사용하여 이름, 액션, 길이 :

[email protected] ~$ python -c "import sys; print ''.join(sorted(sys.stdin))" <data.txt> sorted.txt 
[email protected] ~$ cat sorted.txt 
Alba  Walk  20mins 
Amy  Jogging 40mins 
Bobby Run  10mins 
Jessica Run  20mins 
+0

바 ... 질문에 ... 나는 사람들이 그렇게 할 때 싫어. –

+0

흠, Runtime.exec()? * 오리 * – Joey

+0

+1; 그것은 정확하게 질문에 대답하지 않을 수도 있지만 일회 만하는 경우'sort'를 사용하면 유틸리티 응용 프로그램을 작성하는 시간을 절약 할 수 있습니다. – Rob

3

는 3 개 개의 매개 변수를 포함하는 클래스가 있습니다.

파일을 열어 한 단어 씩 읽으십시오. 각 사람이 클래스의 새 인스턴스를 만들고 알맞은 값을 채운 다음 해당 인스턴스를 일부 컬렉션에 삽입하십시오.

나만의 정렬 방법을 쓰거나 (더 나은 옵션) Java 정렬 기능 중 하나를 사용하여 컬렉션을 정렬하십시오.

다른 파일을 쓰기 위해 쓰고 같은 소집단에 소장품을 씁니다.

위의 동작을 코드로 변환 할 수 없다면 책 "Core JAVA"를 사서 잘 읽으십시오. 여기 누군가가 관대하고 완전한 코드를 제공하기를 바랍니다. : 해당 파일의 데이터 끔찍한 금액이없는 경우

+0

3 단락의 오타 (구매 -> 기준). 당신 (그리고 다른 모든 사람들 - 편집을 통해 추가 된 사람입니까?)이 요일을 무시했습니다. – Tom

+0

내가 기억하는 한, 사전 편집 된 게시물에는 요일이 없었습니다. 중복 키를 지원하지 않는 경우 – user88637

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; 
} 

부하 모든 내용을하지만 난 제안하는 것이 너무 피곤 분별 뭔가 ....

15

여기에 내가 생각 해낸 뭔가 :

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 
    } 
} 
+0

-1 ... –

+0

중복 키를 지원하지 않습니다. 좋은 지적이지만, 그것이 내가 요구 사항이라고 생각한다면, 나는 그것을 다르게 써야 할 것입니다. –

+0

중복 키의 지원을 추가 한 후 코드는 나를 위해 매우 유용했습니다 :) – Markus

4

가 여기에 당신은 단지 첫 번째 단어를 정렬되기 때문에 그 일을 꽤 게으른 방법이있다 :

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(); 
3
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 
    } 
} 
+0

나는 previou pgm을 변경하고 결과를 얻었습니다 .... – user464703

+0

시도해보십시오, 그것은 당신을 도울 것입니다 ..... – user464703

4
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(); 
      } 
     } 
    } 

} 
0

이 솔루션은 자바 8 스트림 API를 사용합니다.

Files.write이 두 번째 인수로 Stream<CharSequence>을 차지한다고 생각하면 map(Function.identity())을 통해 유형 변환이 필요합니다.

import java.io.IOException; 
import java.nio.file.*; 
import java.util.function.Function; 
import java.util.stream.Stream; 

public class FileSortWithStreams { 

    public static void main(String[] args) throws IOException { 
     Path initialFile = Paths.get("files/initial.txt"); 
     Path sortedFile = Paths.get("files/sorted.txt"); 

     Stream<CharSequence> sortedLines = Files.lines(initialFile).sorted().map(Function.identity()); 

     Files.write(sortedFile, sortedLines::iterator, StandardOpenOption.CREATE); 
    } 
} 
관련 문제