回答編集履歴

6

パスの直接記述は互換性の観点で推奨されないので訂正

2017/11/08 14:54

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -20,9 +20,15 @@
20
20
 
21
21
  ```Java
22
22
 
23
- File from = new File("/storage/emulated/0/sample/A");
23
+ File from = new File(Environment.getExternalStorageDirectory() + "/sample/A");
24
24
 
25
25
  ```
26
+
27
+ (11/08 23:46 訂正)
28
+
29
+ **パスの直接記述は推奨されません**。うっかり直接記述で回答してしまいましたが、内部ストレージのパスを得るにはEnvironment.getExternalStorageDirectory()を用いるべきなので、訂正しました。
30
+
31
+ (訂正おわり)
26
32
 
27
33
 
28
34
 
@@ -88,4 +94,4 @@
88
94
 
89
95
 
90
96
 
91
- ものすご〜〜〜〜く長い回答で申し訳ないのだけど、この辺の要点を一つ一つクリアしながら作成してみてはいかがでしょうか。一気にゴールを目指そうとしないとです。アプリ開発は基礎知識の積み重ねですから。
97
+ ものすご〜〜〜〜く長い回答で申し訳ないのだけど、この辺の要点を一つ一つクリアしながら作成してみてはいかがでしょうか。一気にゴールを目指そうとしないとです。アプリ開発は基礎知識の積み重ねですから。

5

推敲

2017/11/08 14:53

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -76,7 +76,7 @@
76
76
 
77
77
 
78
78
 
79
- getExternalFilesDirsの引数をnullにすると、パッケージ名の下にさらにfilesというディレクトリーがくっつくのですが、パッケージ名の直下にはSharedPreferencesを格納すshared_prefディレクトリー、SQLiteのデータベースを格納するdatabaseディレクトリー、任意のファイルを格納するfilesディレクトリーと役割があるので、ここはそに従った方が良と思います。
79
+ getExternalFilesDirsの引数をnullにすると、パッケージ名の下にさらにfilesディレクトリーがくっつくのですが、パッケージ名の直下に置かれるディレクトリーには役割があるので、特殊な事情でもない限りはそに従うのが良と思います。
80
80
 
81
81
 
82
82
 
@@ -88,4 +88,4 @@
88
88
 
89
89
 
90
90
 
91
- ものすご〜〜〜〜く長い回答で申し訳ないのだけど、この辺の要点を一つ一つクリアしながら作成してみてはいかがでしょうか。
91
+ ものすご〜〜〜〜く長い回答で申し訳ないのだけど、この辺の要点を一つ一つクリアしながら作成してみてはいかがでしょうか。一気にゴールを目指そうとしないとこです。アプリ開発は基礎知識の積み重ねですから。

4

再修正

2017/11/07 17:54

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
 
82
82
 
83
- で、最後にファイル移動ですが、一般的にはFile#renameToというメソッドを使う方法がありますが、「内部ストレージからSDカード」のような異なるメディアの移動には使えないので、単純に「コピー元ファイルの内容を全部読み取ってコピー先ファイルに書き出す」みたいな作業になってしまうのではないでしょうか。[このサイト](https://www.sejuku.net/blog/20689)の「java.io.Fileクラスを使用してコピーする」として紹介されているような感じでしょうか。ここは他にもいろいろ方法はありそうですが。
83
+ で、最後にファイル移動ですが、一般的にはFile#renameToというメソッドを使う方法がありますが、「内部ストレージからSDカード」のような異なるメディアの移動には使えないようなので(常識なのかな?)、単純に「コピー元ファイルの内容を全部読み取ってコピー先ファイルに書き出す」みたいな作業になってしまうのではないでしょうか。[このサイト](https://www.sejuku.net/blog/20689)の「java.io.Fileクラスを使用してコピーする」として紹介されているような感じでしょうか。ここは他にもいろいろ方法はありそうですが。
84
84
 
85
85
 
86
86
 

3

文章の修正

2017/11/07 16:19

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -80,11 +80,7 @@
80
80
 
81
81
 
82
82
 
83
- で、最後にファイル移動ですが、一般的にはFile#renameToというメソッドを使う方法がありますが、内部ストレージからSDカードという異なるメディアの移動には使えないうですね。[Android SDKrenameToメソッドのリファレンス](https://developer.android.com/reference/java/io/File.html#renameTo(java.io.File))にも、同じメディア間でなけばならないようなことが書あります。内部ストレージから内部ストレージ、SDカードからSDカードならrenameTo移動可能なことは確認したのですが、跨ぐとだめみたいです
84
-
85
-
86
-
87
- ですから、単純に「コピー元ファイルの内容を全部読み取ってコピー先ファイルに書き出す」みたいな作業になってしまうのではないでしょうか。[このサイト](https://www.sejuku.net/blog/20689)の「java.io.Fileクラスを使用してコピーする」として紹介されている方法を使う感じでしょうか。
83
+ で、最後にファイル移動ですが、一般的にはFile#renameToというメソッドを使う方法がありますが、内部ストレージからSDカード」のよ異なるメディアの移動には使えないので、単純に「コピー元ファイルの内容を全部読み取ってコピー先ファイルに書き出す」みたいな作業になってしまはないでしょうか。[サイト](https://www.sejuku.net/blog/20689)の「java.io.Fileクラスを使用してコピーする」として紹介さような感じでしょうか。こは他にもろいろ方法はありそうですが。
88
84
 
89
85
 
90
86
 

2

文章修正

2017/11/07 16:15

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
 
44
44
 
45
- 次に、SDカードのパッケージ専用ディレクトリーのパスを得るには、Context#getExternalFilesDirsを用いましょう。SDカードのパス名は`/storage/<SDカードのUUID>/`という構成になっています。UUIDはSDカードごとに異なる一意の値になるので、SDカードを差し替えると別の値になります。ここを決め打ちしてしまうと、「今差しているSDカードでしか動かないプログラム」になってしまいます。それでは多分困るでしょう。
45
+ 次に、外部ストレージ(以下、SDカードのパッケージ専用ディレクトリーのパスを得るには、Context#getExternalFilesDirsを用いましょう。SDカードのパス名は`/storage/<SDカードのUUID>/`という構成になっています。UUIDはSDカードごとに異なる一意の値になるので、SDカードを差し替えると別の値になります。ここを決め打ちしてしまうと、「今差しているSDカードでしか動かないプログラム」になってしまいます。それでは多分困るでしょう。
46
46
 
47
47
 
48
48
 
@@ -80,7 +80,7 @@
80
80
 
81
81
 
82
82
 
83
- で、最後移動ですが、Javaの一般的なファイル移動方法としてはFile#renameToというメソッドを使う方法がありますが、内部ストレージから外部ストレという異なるメディアの移動にはこの方法は使えないようですね。[Android SDKのrenameToメソッドのリファレンス](https://developer.android.com/reference/java/io/File.html#renameTo(java.io.File))にも、同じメディア間でなければならないようなことが書いてあります。内部ストレージから内部ストレージ、SDカードからSDカードならrenameToで移動可能なことは確認したのですが、跨ぐとだめみたいです。
83
+ で、最後にファイル移動ですが、一般的はFile#renameToというメソッドを使う方法がありますが、内部ストレージからSDカという異なるメディアの移動には使えないようですね。[Android SDKのrenameToメソッドのリファレンス](https://developer.android.com/reference/java/io/File.html#renameTo(java.io.File))にも、同じメディア間でなければならないようなことが書いてあります。内部ストレージから内部ストレージ、SDカードからSDカードならrenameToで移動可能なことは確認したのですが、跨ぐとだめみたいです。
84
84
 
85
85
 
86
86
 

1

一文追加

2017/11/07 16:00

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
 
82
82
 
83
- で、最後の移動ですが、Javaの一般的なファイル移動方法としてはFile#renameToというメソッドを使う方法がありますが、内部ストレージから外部ストレージという異なるメディアの移動にはこの方法は使えないようですね。[Android SDKのrenameToメソッドのリファレンス](https://developer.android.com/reference/java/io/File.html#renameTo(java.io.File))にも、同じメディア間でなければならないようなことが書いてあります。
83
+ で、最後の移動ですが、Javaの一般的なファイル移動方法としてはFile#renameToというメソッドを使う方法がありますが、内部ストレージから外部ストレージという異なるメディアの移動にはこの方法は使えないようですね。[Android SDKのrenameToメソッドのリファレンス](https://developer.android.com/reference/java/io/File.html#renameTo(java.io.File))にも、同じメディア間でなければならないようなことが書いてあります。内部ストレージから内部ストレージ、SDカードからSDカードならrenameToで移動可能なことは確認したのですが、跨ぐとだめみたいです。
84
84
 
85
85
 
86
86