teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

11

tempの型をintに

2018/01/09 02:26

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -53,7 +53,7 @@
53
53
  }
54
54
  @Override
55
55
  public int compareTo(PathAndModifiedTime o){
56
- long temp=Long.compare(t,o.t);
56
+ int temp=Long.compare(t,o.t);
57
57
  if(temp!=0){
58
58
  return temp;
59
59
  }

10

バグ修正

2018/01/09 02:26

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -57,7 +57,7 @@
57
57
  if(temp!=0){
58
58
  return temp;
59
59
  }
60
- return t.p.compareTo(o.p);
60
+ return p.compareTo(o.p);
61
61
  }
62
62
  }
63
63
  ```

9

()抜けを修正 更新日時が同じ場合パスの大小を用いるように修正

2018/01/09 00:23

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -48,12 +48,16 @@
48
48
  public long getModifiedTime(){
49
49
  return t;
50
50
  }
51
- public Path getPath{
51
+ public Path getPath(){
52
52
  return p;
53
53
  }
54
54
  @Override
55
55
  public int compareTo(PathAndModifiedTime o){
56
+ long temp=Long.compare(t,o.t);
57
+ if(temp!=0){
58
+ return temp;
59
+ }
56
- return Long.compare(t,o.t);
60
+ return t.p.compareTo(o.p);
57
61
  }
58
62
  }
59
63
  ```

8

メソッドの勘違いを修正

2018/01/08 14:10

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -52,8 +52,8 @@
52
52
  return p;
53
53
  }
54
54
  @Override
55
- public int compare(PathAndModifiedTime f,PathAndModifiedTime s){
55
+ public int compareTo(PathAndModifiedTime o){
56
- return Long.compare(f.t,s.t);
56
+ return Long.compare(t,o.t);
57
57
  }
58
58
  }
59
59
  ```

7

型間違いを修正

2018/01/02 18:50

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -38,7 +38,7 @@
38
38
  }
39
39
  ```
40
40
  ```java
41
- public class PathAndModifiedTime implements Comparable<PathAndmodifedTime>{
41
+ public class PathAndModifiedTime implements Comparable<PathAndModifiedTime>{
42
42
  private Path p;
43
43
  private long t;
44
44
  public PathAndModifiedTime(Path path,long time){

6

型が一致してないのを修正

2018/01/02 18:10

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -31,7 +31,7 @@
31
31
  }catch(IOExceotion ex){
32
32
  throw new UncheckedIOException(ex);
33
33
  }
34
- }).collect(Collectors.toCollection(TreeMap::new));
34
+ }).collect(Collectors.toCollection(TreeSet::new));
35
35
  }catch(UncheckedIOException ex){
36
36
  throw ex.getCause();
37
37
  }

5

セミコロン追加

2018/01/02 18:07

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -49,7 +49,7 @@
49
49
  return t;
50
50
  }
51
51
  public Path getPath{
52
- return p
52
+ return p;
53
53
  }
54
54
  @Override
55
55
  public int compare(PathAndModifiedTime f,PathAndModifiedTime s){

4

返り値ミスを修正

2018/01/02 18:00

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -22,11 +22,11 @@
22
22
  よく考えたら並び替えには最終更新日時が必要ですよね
23
23
  二回ファイルの属性を取得するのは無駄なので……
24
24
  ```java
25
- TreeSet<PathAndModifiedTime> void test() throws IOException{
25
+ TreeSet<PathAndModifiedTime> test() throws IOException{
26
26
  try(Stream<Path> s=Files.walk(Paths.get("."))){
27
27
  return s.map(p->{
28
28
  try{
29
- long t=Files.getLastModifiedTime(p);
29
+ long t=Files.getLastModifiedTime(p);
30
30
  return new PathAndModifiedTime(p,t);
31
31
  }catch(IOExceotion ex){
32
32
  throw new UncheckedIOException(ex);

3

並べ替えるコードも追加

2018/01/02 17:57

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -1,15 +1,60 @@
1
1
  ``java.nio.Files.find``
2
2
  ```java
3
-
3
+ try{
4
- try(Stream s=Files.find(Paths.get("."),1,(p,e)->System.currentTimeMillis()-e.lastModifiedTime().toMillis()>TimeUnit.MILLISECONDS.convert(5L,TimeUnit.DAYS))){//並べ替えなくてもできた(1)(2)
4
+ try(Stream<Path> s=Files.find(Paths.get("."),1,(p,e)->System.currentTimeMillis()-e.lastModifiedTime().toMillis()>TimeUnit.MILLISECONDS.convert(5L,TimeUnit.DAYS))){//並べ替えなくてもできた(1)(2)
5
- s.parallel().forEach(p->{
5
+ s.parallel().forEach(p->{
6
+ try{
6
- Files.deleteIfExists(p);
7
+ Files.deleteIfExists(p);
7
- System.out.println(p);//ログ出力(3)
8
+ System.out.println(p);//ログ出力(3)
9
+ }catch(IOException ex){
10
+ throw new UncheckedIOException(ex);
11
+ }
8
- });
12
+ });
13
+ }catch(UncheckedIOException ex){
14
+ throw ex;
15
+ }
9
16
  }catch(IOException ex){
10
- System.out.println(ex);
17
+ System.out.println(ex);
11
18
  }
12
19
  ```
13
20
  ``walkFileTree``とかも使えそう(どういうのがパフォーマンスが出るのかな?気になってきた)
14
21
  並び替えが必要ならstream apiでも使って並べてください
22
+ よく考えたら並び替えには最終更新日時が必要ですよね
23
+ 二回ファイルの属性を取得するのは無駄なので……
24
+ ```java
25
+ TreeSet<PathAndModifiedTime> void test() throws IOException{
26
+ try(Stream<Path> s=Files.walk(Paths.get("."))){
27
+ return s.map(p->{
28
+ try{
29
+ long t=Files.getLastModifiedTime(p);
30
+ return new PathAndModifiedTime(p,t);
31
+ }catch(IOExceotion ex){
32
+ throw new UncheckedIOException(ex);
33
+ }
34
+ }).collect(Collectors.toCollection(TreeMap::new));
35
+ }catch(UncheckedIOException ex){
36
+ throw ex.getCause();
37
+ }
38
+ }
39
+ ```
40
+ ```java
41
+ public class PathAndModifiedTime implements Comparable<PathAndmodifedTime>{
42
+ private Path p;
43
+ private long t;
44
+ public PathAndModifiedTime(Path path,long time){
45
+ p=path;
46
+ t=time;
47
+ }
48
+ public long getModifiedTime(){
49
+ return t;
50
+ }
51
+ public Path getPath{
52
+ return p
53
+ }
54
+ @Override
55
+ public int compare(PathAndModifiedTime f,PathAndModifiedTime s){
56
+ return Long.compare(f.t,s.t);
57
+ }
58
+ }
59
+ ```
15
60
  コンパイル通してないんでよろしく

2

パフォーマンスがいいらしいdeleteIfExistsに変更

2018/01/02 17:56

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  try(Stream s=Files.find(Paths.get("."),1,(p,e)->System.currentTimeMillis()-e.lastModifiedTime().toMillis()>TimeUnit.MILLISECONDS.convert(5L,TimeUnit.DAYS))){//並べ替えなくてもできた(1)(2)
5
5
  s.parallel().forEach(p->{
6
- Files.delete(p);
6
+ Files.deleteIfExists(p);
7
7
  System.out.println(p);//ログ出力(3)
8
8
  });
9
9
  }catch(IOException ex){

1

式の間違いを修正

2018/01/02 16:03

投稿

tignear
tignear

スコア260

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  ``java.nio.Files.find``
2
2
  ```java
3
3
 
4
- try(Stream s=Files.find(Paths.get("."),1,(p,e)->e.lastModifiedTime().toMillis()-System.currentTimeMillis()>TimeUnit.MILLISECONDS.convert(5L,TimeUnit.DAYS))){//並べ替えなくてもできた(1)(2)
4
+ try(Stream s=Files.find(Paths.get("."),1,(p,e)->System.currentTimeMillis()-e.lastModifiedTime().toMillis()>TimeUnit.MILLISECONDS.convert(5L,TimeUnit.DAYS))){//並べ替えなくてもできた(1)(2)
5
5
  s.parallel().forEach(p->{
6
6
  Files.delete(p);
7
7
  System.out.println(p);//ログ出力(3)