2

java.io.Fileを使用して、外部ストレージ上のいくつかのPDFファイルを処理しています。私はそれらをロードしていて、ログにいくつかあることに気づきましたFile NotFoundExceptions例外を調べていたところ、 UNCの奇妙な記号(内側が内側にある黒い四角?=�)に気づきました。

これが私のファイルの作り方です。違いが生じる場合は、バッファリングされたリーダーから文字列を取得します。

    File myPathFile
    FileReader fr = new FileReader(myPathFile);
    BufferedReader br = new BufferedReader(fr)
    String o = br.readLine();
    File f = new File(o)

私はそれが同じだと思った:

     File f = new File("\\test\ö\myFile.pdf"); //When the UNC looks like this it won't work. (the ö is �)
     File f2 = new File("\\test\myFile.pdf");   //This works
4

1 に答える 1

2

まず、これはURLではなく、UNCです。

次に、かなり重要な部分を忘れているため、これは正しいUNCではありません。

\\ComputerName\SharedFolder\Resource

グループ化はどこにありますか

[\\] flag to suggest it's a UNC
[ComputerName] The name of the remote computer
[\] separator character
[SharedFolder] The shared folder name
[\Resource] The path name of the remote file

最後に、文字列内の特殊文字を正しくエスケープしていないため、おそらくマシンから降りることさえできず、ましてや目的の場所に到達することもできません。

\Javaで入力するには、null、バックスペースなどの特殊\文字に使用されていることを知っておく必要があります。したがって、単一の通常の文字を取得するには、を入力する必要があります。それはあなたの最初の例になります。\\\

Microsoft以外のシステムでは、リモートパス名がおそらく/の代わりに使用することに注意してください。これはエスケープ文字\/はないため、2回入力する必要はありません。

 File f = new File("\\\\test\\ö\\myFile.pdf");

名前の付いた共有フォルダがないため、これは機能しませんö

そしてあなたの2番目の例

 File f2 = new File("\\\\test\\myFile.pdf");

2番目の例は、開くリソースがないため、機能しません。

マシンから離れたくないと仮定すると、ローカルファイル名の一部が欠落しています。Windowsでは、フルパスには「ボリューム名」が含まれます。これは通常、C:または類似したものです。

 File f = new File("c:\\test\\myFile.pdf");

ボリューム名を省略している場合があります。その場合は、オペレーティングシステムの優れた機能を利用して、ファイルを検索します。一般的に言って、それは素晴らしい考えではありません。

 File f = new File("\\test\\myFile.pdf");

ただし、これは2番目の例と似ていますが、スラッシュをエスケープするための追加のスラッシュが含まれています。あなたの実際の例はそうではありませんが。

于 2012-09-10T15:13:48.600 に答える