2016-04-07 13 views
1

これは実際に質問ではありませんが、私は説明が必要です。私はC://ドライブの下にディレクトリを作成しようとしていました。そう;ルートディレクトリ、奇妙な応答の下にファイルを作成する

try { 
      File f_paz = new File("c://Ekap_Pazarlik_xml" + file_currentDate + "//"); 

      File parent_z = f_paz.getParentFile(); 
      if (null != parent_z) { 
       parent_z.mkdirs(); 
      } 
      if (!f_paz.exists()) { 
       f_paz.createNewFile(); 
      } 
     } catch (IOException e2) { 
      // TODO Auto-generated catch block 
      e2.printStackTrace(); 
     } 

私はそれを試み、「アクセスが拒否されました」というエラーが表示されたので、Webですべてのソリューションを試しました。何も起こらなかった。

不思議なことに、私はそこに「スペース」を置くことにしました。

File f_paz = new File("c://Ekap_Pazarlik_xml" + file_currentDate + "// "); 
                    here 

"// "の直後に、それが働いた。私はそのようなディレクトリを作成することができました。なぜそれがそれのように働いたのか分かりません。私にいくつかの説明を教えてください。ありがとう!

+0

「C:/ Ekap_whatever /」は、ファイル名ではなくディレクトリ名です。最後にスペースを追加すると、そのファイルの名前は残りの部分がそのパスになるスペースです。 Windowsでは、空の名前のファイルを作成することはできません(静かに拒否するようですが)ので、そのディレクトリのみが表示されます。空白ではなく空白文字(たとえば 'x')を試してください。その名前のファイルがディレクトリに作成されています。 – Thomas

+0

私はDİrectoryをファイルではなく作成しようとしました。なぜスペースなしで受け入れていないのですか?それの背後にある論理は何ですか?私はそれを受け入れる必要があるファイル(パス)へのパスを与えています。なぜ私は最後にスペースを入れる必要があるのですか? ?私はそれを処理することができるように少なくともコンパイラは私に適切なエラーを与える必要があります。アクセスが拒否されたのは、そのエラーにあまりにも奇妙です。 –

+0

私は答えに私のコメントを入れ、いくつかの情報を追加します。 Sec。 – Thomas

答えて

2

f_paz.createNewFile();は、ディレクトリではなく新しいファイルの作成を試みます。多くのWindowsシステムでは、ファイルを直接C:に作成することはできません。そのため、例外が発生します。

ディレクトリではなくファイルを作成したいので、代わりにf_paz.mkdir();を使用してください。最後に"//"、btwは必要ありません。

スペースを追加すると、パス"C:/Ekap_xxx/ "を使用するとどうなりますか?空のファイル名が" "、親ディレクトリ名が"Ekap_xxx"のパスが表示されます。今すぐparent_z"C:/Ekap_xxx"を参照し、したがってparent_z.mkdirs();はディレクトリ"Ekap_xxx"を作成します。今度はf_paz.exists()は、ファイルシステムが無効な名前のファイルをまだ存在していると判断していると思われるので、trueを返します(なぜそうであるかについての情報をネイティブコードで隠しておく必要があります)。

関連する問題