无法在java中创建文件(及其目录)后写入文件

时间:2014-08-12 21:46:31

标签: java xml java-io fileoutputstream printwriter

我正在尝试从互联网上下载XML文件,然后将此文件放在目录中(C:/ Nationstates)。

File theDir = new File("/NationStates");

  if (!theDir.exists()) {
    System.out.println("creating directory: /NationStates" );
    boolean result = false;

    try{
        theDir.mkdir();
        result = true;
     } catch(SecurityException se){
       System.out.println("Dir exists");
     }        
  }

  new PrintWriter("/NationStates/NS.xml");

  URL website = new URL("https://www.nationstates.net/cgi-bin/api.cgi?nation=ageena");
  ReadableByteChannel rbc = Channels.newChannel(website.openStream());
  FileOutputStream fos = new FileOutputStream("/NS.xml");
  fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
  fos.close();

我可以创建目录,并创建文件(NS.XML)但是当我尝试写入文件时,我收到以下错误:

Exception in thread "main" java.io.FileNotFoundException: \NS.xml (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at XML.main(XML.java:31)

它表示拒绝访问,但我刚刚在同一位置创建了该目录中的目录和文件。

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

您创建一个目录:

File theDir = new File("/NationStates");
...
theDir.mkdir();

但是你不要写这个目录中的文件:

FileOutputStream fos = new FileOutputStream("/NS.xml");

此外,mkdir()并不一定要创建目录。如果失败,则返回false。但是你没有检查返回的值。

答案 1 :(得分:1)

替换:

FileOutputStream fos = new FileOutputStream("/NS.xml");

通过

FileOutputStream fos = new FileOutputStream("/NationStates/NS.xml");