質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

4回答

2776閲覧

javaのファイルの入出力について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2015/11/04 07:20

javaのファイルの入出力について:

指定されたディレクトリが存在する場合、
そのディレクトリ内のファイルを、
サイズ順、更新日順に
それぞれソートして表示するプログラム例を
示していただきたいです。

ディレクトリ名は適当でいいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

こういう「丸投げ案件」は回答が付きづらいと思います。
どこまでわかって、どこがわからないのか、という問題の切り分けをしないと回答は付かないと思います。

投稿2015/11/04 08:04

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

面白そうな実装ができそうだったので、作ってみました。一応例としては示しますが、オプションでソートの仕方を変えたりしたので、細かい仕様は異なるかと思います。あと、たぶん、習ってない機能がたくさんあると思いますので、どこまで参考になるかはわかりません。コンパイルや実行の仕方は最初のコメントに書いてあります。Windowsの場合はwgetのためにPowerShell 3.0を使う、:を;に変えるなど対応してください。

Java

1/* 2wget https://projectlombok.org/downloads/lombok.jar 3wget http://www.urbanophile.com/arenn/hacking/getopt/java-getopt-1.0.14.jar 4javac -classpath lombok.jar:classpath java-getopt-1.0.14.jar DirSortList.java 5java -classpath lombok.jar:java-getopt-1.0.14.jar:. DirSortList 6*/ 7import java.io.*; 8import java.nio.file.*; 9import java.nio.file.attribute.*; 10import java.util.*; 11import java.util.stream.*; 12import java.util.function.*; 13import lombok.*; 14import gnu.getopt.*; 15public class DirSortList { 16 @FunctionalInterface 17 public interface CheckedFunction<T, R> { 18 R apply(T t) throws IOException; 19 } 20 public static <T, R> Function<T, R> wrapUnchecked( 21 CheckedFunction<T, R> function) { 22 return (x) -> { 23 try { 24 return function.apply(x); 25 } catch (IOException e) { 26 throw new UncheckedIOException(e); 27 } 28 }; 29 } 30 public static void main(String[] args) throws IOException { 31 val options = new Getopt("DirSortList", args, "RtSh"); 32 val help = "使い方: java DirSortList [options] [--] dir...\n" 33 + " -R サブディレクトリも見る。\n" 34 + " -t 更新時刻でソートする。(新しい順)\n" 35 + " -S ファイルサイズでソートする。(大きいファイル順)\n" 36 + " -h ヘルプを表示する。\n"; 37 Comparator<Path> comp = Comparator.comparing(Path::toString); 38 Function<Path, Stream<Path>> fileStream = wrapUnchecked(Files::list); 39 int c; 40 while ((c = options.getopt()) != -1) { 41 switch (c) { 42 case 'R': 43 fileStream = wrapUnchecked(Files::walk); 44 break; 45 case 't': 46 comp = Comparator 47 .comparing(wrapUnchecked( 48 (CheckedFunction<Path, FileTime>)Files::getLastModifiedTime)) 49 .reversed(); 50 break; 51 case 'S': 52 comp = Comparator 53 .comparing(wrapUnchecked((CheckedFunction<Path, Long>)Files::size)) 54 .reversed(); 55 break; 56 case 'h': 57 System.out.print(help); 58 return; 59 default: 60 System.err.print(help); 61 return; 62 } 63 } 64 for (int i = options.getOptind(); i < args.length; i++) { 65 val dir = Paths.get(args[i]); 66 try { 67 fileStream.apply(dir) 68 .filter(Files::isRegularFile) 69 .sorted(comp) 70 .map(dir::relativize) 71 .map(Path::toString) 72 .forEach(System.out::println); 73 } catch (UncheckedIOException e) { 74 System.err.println("ディレクトの読込時にエラーが発生しました。"); 75 } 76 } 77 } 78}

投稿2015/11/04 12:34

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

質問の動機が不明確なので、回答しにくいです。

なんらかの与えられた課題を自分でやらずに、ここで解決しようとしているのでしょうか?
java の勉強をしていて、自分で実現をしてみようとしたが、方法がわからずに質問しているのでしょうか?

いずれにしても、なにか自分でやってみた途中経過を示さないと、回答や助言が付かないとおもいます。

投稿2015/11/04 11:41

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

うーん、mo878moさんは学生さんか新人エンジニアでしょうか。
他の質問も見ましたが、全体的に質問の仕方も曖昧で、
仕事でこの仕様で投げられたら逆に質問するしか無いですね。

指定されたディレクトリが存在する場合、
→存在しない場合は?
そのディレクトリ内のファイルを、
→サブディレクトリは無視していいんですよね?
サイズ順、更新日順に
→第一ソートがサイズで、第二ソートが更新日ということですか?
全部同一の場合はどちらが優先して表示されても良いのですか?

-----追記
何を期待して質問したのかわからないのであまり考えていません。
これをそのままコピペして何かの課題なり宿題なりに提出して動かないと言われても責任は負いません。
質問事項にイマイチ的を得ない回答を頂いたので、適当に補完しました。

Java

1import java.io.File; 2import java.text.SimpleDateFormat; 3import java.util.ArrayList; 4import java.util.Collections; 5import java.util.Comparator; 6import java.util.Date; 7 8public class Test { 9 10 public static void main(String[] args) { 11 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 12 String path = "C:\\hoge"; 13 File dir = new File(path); 14 15 if (!dir.exists()) { 16 System.out.println("存在しません"); 17 return; 18 } 19 File[] files = dir.listFiles(); 20 21 ArrayList<FileData> list = new ArrayList<FileData>(); 22 23 for (int i = 0; i < files.length; i++) { 24 File file = files[i]; 25 String fileName = file.getName(); 26 long size = file.length(); 27 FileData fd = new FileData(); 28 fd.setId(i); 29 fd.setFileName(fileName); 30 fd.setSize(size); 31 fd.setLastUpdate(file.lastModified()); 32 list.add(fd); 33 } 34 35 Collections.sort(list, new FileCompSize()); 36 37 for (FileData fd : list) { 38 System.out.println(fd.getId() + " " + fd.getFileName() + " size:" + fd.getSize() ); 39 } 40 41 Collections.sort(list, new FileCompLastUpdate()); 42 43 for (FileData fd : list) { 44 System.out.println(fd.getId() + " " + fd.getFileName() + " lastUpdate:" + sdf.format(new Date(fd.getLastUpdate())) ); 45 } 46 } 47 48 49 static final class FileCompSize implements Comparator<FileData> { 50 @Override 51 public int compare(FileData f1, FileData f2) { 52 int i = Long.compare(f1.getSize(), f2.getSize()); 53 if (i == 0 ) { 54 i = Long.compare(f1.getId(), f2.getId()); 55 } 56 return i; 57 } 58 59 } 60 61 static final class FileCompLastUpdate implements Comparator<FileData> { 62 @Override 63 public int compare(FileData f1, FileData f2) { 64 int i = Long.compare(f1.getLastUpdate(), f2.getLastUpdate()); 65 if (i == 0 ) { 66 i = Long.compare(f1.getId(), f2.getId()); 67 } 68 return i; 69 } 70 71 } 72 73 static final class FileData { 74 75 private int id; 76 private String fileName; 77 private long size; 78 private long lastUpdate; 79 80 public int getId() { 81 return id; 82 } 83 public void setId(int id) { 84 this.id = id; 85 } 86 public String getFileName() { 87 return fileName; 88 } 89 public void setFileName(String fileName) { 90 this.fileName = fileName; 91 } 92 public long getSize() { 93 return size; 94 } 95 public void setSize(long size) { 96 this.size = size; 97 } 98 public long getLastUpdate() { 99 return lastUpdate; 100 } 101 public void setLastUpdate(long lastUpdate) { 102 this.lastUpdate = lastUpdate; 103 } 104 } 105 106} 107

投稿2015/11/04 08:49

編集2015/11/04 12:36
anonymouskawa

総合スコア856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/11/04 10:01

指定されたディレクトリが存在しない場合は、 一言「存在しません」と表示されるだけでいいです。 第一ソートがサイズで、第二ソートが更新日ということで、 それぞれ独立で表示させたいです。
anonymouskawa

2015/11/04 12:52

あー、raccyさんの書き方見ると自分のはイケてないなぁ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問