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();
精彩评论