2017-03-17 5 views
0

ファイルをunixタイムスタンプでソートしようとしています。以下は、ディレクトリ内のファイル名です。ディレクトリ内のファイルを2番目の後のファイル名のtimstamp文字列でソートします。

20151102-2148040042-1446522484838-Game21500052-x.realtime 
20121102-2148010042-1446522484138-Game21500052-x.realtime 

秒後にUNIXのタイムスタンプをソートしてからファイルを取得する必要があります。どのように私はjavaでそれを行うことができますか?

私は

def extract_timestamp(filename): 
    timestamp = filename.split('-')[2] 
    return timestamp 
directory = '/home/ubuntu/assdd/' 
# Get all files from the path 
log_files = os.listdir(directory) 

# Sort files by timestamp 
log_files.sort(key=extract_timestamp) 

# Get full path of each file 
files = [os.path.join(directory,data_file) for data_file in log_files] 

答えて

2

以下の非常に直接的なアプローチのようなPythonでそれを行うことができています:それは比較Comparatorを作成

List<String> fileNames = ... ; 

List<String> sortedFileNames = fileNames.stream() 
    .sorted(Comparator.comparingLong(s -> Long.parseLong(s.split("-")[2]))) 
    .collect(Collectors.toList()); 

sortedコールは、いくつかの説明に値しますLong値(Comparator<Long>)。 fileName文字列を-で区切られた部分に分割することによって、Longの値を取得します。次に、結果の分割の3番目の要素(数値を含む)を取得します。その後、この番号は長い番号に変換されます。

1

カスタムコンパレータを使用してすべてのファイルをソートすることができます。ここでは、タイムスタンプを解析してファイルのタイムスタンプを比較できます。最も簡単な方法は次のとおりです。

private String getTimestamp(File file) { 
    return file.getName().substring(20, 33); 
} 

public List<File> sortFilesInDir(String yourpath) { 
    File folder = new File(yourpath); 
    File[] listOfFiles = folder.listFiles(); 

    if (listOfFiles == null) { 
     return null; 
    } 
    List<File> files = Arrays.asList(listOfFiles); 

    Collections.sort(files, new Comparator<File>() { 
     @Override 
     public int compare(File o1, File o2) { 
      return getTimestamp(o1).compareTo(getTimestamp(o2)); 
     } 
    }); 
    return files; 
} 

あなたはたくさんのファイルを持っていて、毎回タイムスタンプ解析したくない場合は、あなたのようなレコードに各ファイルを保存することができます:

private static class FileRecord { 
    private File file; 
    private String timestamp; 

    public FileRecord(File file) { 
     this.file = file; 
     this.timestamp = file.getName().substring(20, 33); 
    } 

    public File getFile() { 
     return file; 
    } 

    public void setFile(File file) { 
     this.file = file; 
    } 

    public String getTimestamp() { 
     return timestamp; 
    } 

    public void setTimestamp(String timestamp) { 
     this.timestamp = timestamp; 
    } 
} 

private List<FileRecord> convertFilesToRecords(File[] files) { 
    List<FileRecord> records = new ArrayList<>(); 
    for (File file : files) { 
     records.add(new FileRecord(file)); 
    } 
    return records; 
} 

public List<File> sortFilesInDir(String yourpath) { 
    File folder = new File(yourpath); 
    List<FileRecord> records = convertFilesToRecords(folder.listFiles()); 

    Collections.sort(records, new Comparator<FileRecord>() { 
     @Override 
     public int compare(FileRecord o1, FileRecord o2) { 
      return o1.getTimestamp().compareTo(o2.getTimestamp()); 
     } 
    }); 
    List<File> files = new ArrayList<>(); 
    for (FileRecord record : records) { 
     files.add(record.getFile()); 
    } 
    return files; 
} 
関連する問題