回答編集履歴

1

補足追加

2016/10/24 08:37

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -9,3 +9,111 @@
9
9
 
10
10
 
11
11
  それにしてもC:\test.txtが見つからないとは・・・ミスタイプしそうもないけど実際のファイルの名前の方にミスタイプがあるとしか考えずらい気がします。ファイル名の前後に空白文字が入ってたりとか。
12
+
13
+
14
+
15
+ 追記・補足:
16
+
17
+ むむむ、解決に至りませんでしたか。気持ち悪いですね・・・質問自体は閉じられましたが多少補足します。
18
+
19
+ 1. 半角の'¥'文字が環境依存文字
20
+
21
+ Windows上では大抵の場合半角YEN記号とバックスラッシュは同じ文字と解釈できることが多いです。違って見えるのは表示に用いるフォントの違いと思っても概ねよいでしょう。(厳密にはそういえないケースがあるので常にそうと思わない方がよいかも知れませんが、文字コードの話はややこしく詳細をこの場に書ききれない程なので必要に応じて調べるとよいです)
22
+
23
+
24
+
25
+ 2. Windowsのパス区切り文字
26
+
27
+ Java言語のエスケープ文字がWindowsのパス区切り文字と同じバックスラッシュになっていて文字列上常にエスケープしないといけないという問題は全世界共通です。この点は半角YEN記号文字が環境依存文字であるかどうかには直接は関係ないと考えてもよいでしょう。
28
+
29
+
30
+
31
+ 3. C:\temp.txtが見つからない
32
+
33
+ 何度も見直されたということなのでひょっとすると他の原因ということもあるかも知れません。ただ気持ちが悪いので、見間違えようのない確認方法をご紹介します。ディレクトリの下のファイル名を検索して望みのファイル名に一致しているかどうかを直接確認するプログラムの例です。一致しなかったときに原因を推定できるよう文字コードを16進数でダンプするようにしていますので、もし不一致なら文字コードを見比べるとどの文字が違うかがわかります。(自分は過去に見た目では違いがわからずこうすることで初めて原因がわかったことがありました)
34
+
35
+
36
+
37
+ ```java
38
+
39
+ ...
40
+
41
+ import java.io.File;
42
+
43
+
44
+
45
+ public class PathTest {
46
+
47
+ public static void main(String[] args) {
48
+
49
+ // アクセスしようとしているファイル
50
+
51
+ File file = new File("C:\\test.txt");
52
+
53
+
54
+
55
+ File dir = file.getParentFile();
56
+
57
+ // アクセスしようとしているファイル名と文字コードをダンプ
58
+
59
+ dump(file.getName());
60
+
61
+ // ディレクトリに同じ名前のファイルがあるかチェック(ファイル名を文字コードでもダンプ)
62
+
63
+ for (File f : dir.listFiles()) {
64
+
65
+ dump(f.getName());
66
+
67
+ boolean match = file.toPath().equals(f.toPath());
68
+
69
+ System.out.println("match ? " + match);
70
+
71
+ if (match) break; // もし一致していたらループを中断
72
+
73
+ }
74
+
75
+ }
76
+
77
+
78
+
79
+ static void dump(String name) {
80
+
81
+ StringBuilder sb = new StringBuilder();
82
+
83
+ sb.append("name = ");
84
+
85
+ sb.append(name);
86
+
87
+ sb.append(", code =");
88
+
89
+ for (char c : name.toCharArray()) {
90
+
91
+ sb.append(String.format(" 0x%X", c & 0xffff));
92
+
93
+ }
94
+
95
+ System.out.println(sb.toString());
96
+
97
+ }
98
+
99
+ }
100
+
101
+ ```
102
+
103
+
104
+
105
+ 一致していれば出力結果が以下のようになるのが期待です
106
+
107
+ name = test.txt, code = 0x74 0x65 0x73 0x74 0x2E 0x74 0x78 0x74
108
+
109
+ name = $Recycle.Bin, code = 0x24 0x52 0x65 0x63 0x79 0x63 0x6C 0x65 0x2E 0x42 0x69 0x6E
110
+
111
+ match ? false
112
+
113
+ ...
114
+
115
+ name = test.txt, code = 0x74 0x65 0x73 0x74 0x2E 0x74 0x78 0x74
116
+
117
+ match ? true
118
+
119
+