开发者

creating a directory in java

I'm trying to create a directory and copy files to it. The code I've implemented and its output is below. The problem seems self explanatory, but I'll make it explicit for those who can't tell.

Problem


No matter what I do, I can't seem to create the destination file required to copy the file.

Code


get is the file to be copied, and dest is the directory to which it will be copied. Line numbers and "ERR>" were added for clarity. I've commented out other methods of file creation which I've tried, but they all failed.

115:  private void copyTo(File get, File dest)
116:  {
117:    try
118:    {
119:      dest = new File((dest.getPath().endsWith(File.separator) ? dest.getPath() : dest.getPath() + File.separator) + get.getName());
120:      
121:      java.io.FileInputStream fis = new java.io.FileInputStream(get);
122:      if (dest.exists())
123:        while(!dest.delete());
124:      dest.mkdir();
125://      dest.createNewFil开发者_Go百科e();
126://      java.io.FileWriter w = new java.io.FileWriter(dest);
127://      w.write("");
128:      System.out.println("Writing \"" + get + "\" to \"" + dest + "\"");
129:ERR>  java.io.FileOutputStream fos = new java.io.FileOutputStream(dest);
130:      int b;
131:      do
132:      {
133:        b = fis.read();
134:        fos.write(b);
135:      }while (b != -1);
136:    }
137:    catch (FileNotFoundException ex)
138:    {
139://      System.err.println("404: \"" + get + "\"");
140:      ex.printStackTrace();
141:    }
142:    catch (java.io.IOException ex)
143:    {
144://      System.err.println("IO exception on \"" + get + "\"");
145:      ex.printStackTrace();
146:    }
147:  }

Output


Writing "J:\warehouse.txt" to "J:\backup\warehouse.txt"
java.io.FileNotFoundException: J:\backup\warehouse.txt (The system cannot find the path specified)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
        at copy.TUI.copyTo(TUI.java:129)
        at copy.TUI.copy(TUI.java:110)
        at copy.TUI.run(TUI.java:102)
        at copy.Main.main(Main.java:37)


Use dest.getParentFile().mkdir(). This will create the parent dir for your dest file. In case multiple parent path elements might be missing you can use the mkdirs() method to create all missing directories recursively.


Was able to fix it myself. Pretty derpy of me to not see it in the first place...

  private void copyTo(File get, File dest)
  {
    try
    {
      File newDest = new File((dest.getPath().endsWith(File.separator) ? dest.getPath() : dest.getPath() + File.separator) + get.getName());

      java.io.FileInputStream fis = new java.io.FileInputStream(get);
      if (dest.exists())
       dest.delete();
      dest.mkdirs();
      dest.setWritable(true);
      dest.setReadable(true);
//      dest.createNewFile();
//      java.io.FileWriter w = new java.io.FileWriter(dest);
//      w.write("");
      System.out.println("Writing \"" + get + "\" to \"" + dest + "\"");
      java.io.FileOutputStream fos = new java.io.FileOutputStream(newDest);
      int b;
      do
      {
        b = fis.read();
        fos.write(b);
      }while (b != -1);
    }
    catch (FileNotFoundException ex)
    {
//      System.err.println("404: \"" + get + "\"");
      ex.printStackTrace();
    }
    catch (java.io.IOException ex)
    {
//      System.err.println("IO exception on \"" + get + "\"");
      ex.printStackTrace();
    }
  }


Use following -

dest = dest.isDirectory() ?  new File(dest, get.getName()):  new File(dest.getParentDirectory(), get.getName());
dest.getParentDirectory().mkdirs();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜