wsyy
asked on
FileOutputStream can't create file
Hi,
I am using the attached code to create a file, but exception was thrown out:
"The system cannot find the path specified"
This is the file I wanted to create:
c:/crawl_data/2011-02-27/g uansheng/1 233445dfaf +guansheng +T¿+2011-0 2-27_10-42 -05+1.html
I also try to create the directory "c:/crawl_data/2011-02-27/ guansheng/ " first, but I can't create the directory with the second code piece.
I also did some research that I need to create the file before I use FileOutputStream to write to it. Is it true? How can I create and write to a file on the fly?
Thanks
I am using the attached code to create a file, but exception was thrown out:
"The system cannot find the path specified"
This is the file I wanted to create:
c:/crawl_data/2011-02-27/g
I also try to create the directory "c:/crawl_data/2011-02-27/
I also did some research that I need to create the file before I use FileOutputStream to write to it. Is it true? How can I create and write to a file on the fly?
Thanks
String base_dir="c:/crawl_data/";
String dir=ts.substring(0, 10)+"/"+domain+"/";
String filename=code+"+"+domain+"+"+prod+"+"+ts+"+"+order+".html";
try {
byte[] utf8 = content.getBytes("UTF-8");
File afile = new File(base_dir+dir+filename);
System.out.println(base_dir+dir+filename);
if(!afile.exists()){
if(afile.createNewFile()){
FileOutputStream out = new FileOutputStream(afile);
out.write(utf8);
out.close();
}
}
} catch (UnsupportedEncodingException e) {
System.out.println("UTF-8¿¿¿¿:code="+code+ "\n"+e.getMessage());
return false;
} catch (FileNotFoundException e) {
System.out.println("¿¿¿¿¿:code="+code+ "\n"+e.getMessage());
return false;
} catch (IOException e) {
System.out.println("IO¿¿:code="+code + "\n"+e.getMessage());
return false;
}
String dir = "c:/crawl_data/2011-02-27/guansheng/";
if((new File(dir)).mkdir()){
System.out.println("done");
}
However if you believe that upper path, say c:/crawl_data/2011-02-27/ should already be in existence, then
it is worth investigating more why such error appears before you use mkdirs() instead of mkdir()
it is worth investigating more why such error appears before you use mkdirs() instead of mkdir()
If your path to the folder where you want to place your output file exists, then you don't need to create file in a special operator- just
writing through FileoutputStream should be enough. If the folder itself does not exist - it will thow an exception, but if the folder exists - file
willbe created on the fly
writing through FileoutputStream should be enough. If the folder itself does not exist - it will thow an exception, but if the folder exists - file
willbe created on the fly
ASKER
for_yan, the directories are not in existent beforehand.
I change my code as below:
if(!afile.exists()){
if(afile.mkdirs()){
FileOutputStream out = new FileOutputStream(afile);
out.write(utf8);
out.close();
}
}
Note please that I now use mkdirs(). This time an FileNotFoundException exception was thrown out, together with "Access denied" info.
Why these two can be thrown out together? which is the main reason?
I change my code as below:
if(!afile.exists()){
if(afile.mkdirs()){
FileOutputStream out = new FileOutputStream(afile);
out.write(utf8);
out.close();
}
}
Note please that I now use mkdirs(). This time an FileNotFoundException exception was thrown out, together with "Access denied" info.
Why these two can be thrown out together? which is the main reason?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
for_yan, you are right. I need to separate the directory from the file.
one last question: how can I specify the read-only permission to the newly created file? Is it something that can be done by Java?
one last question: how can I specify the read-only permission to the newly created file? Is it something that can be done by Java?
ASKER
the example shows how to set permission to a folder, right? how can i set it on file level?
ASKER
in addition, when i changed my code as follow:
File afile = new File(dir);
if(!afile.exists()){
if(afile.mkdirs()){
File f = new File(dir+filename);
f.setReadOnly();
FileOutputStream out = new FileOutputStream(f);
out.write(utf8);
out.close();
}
}
I can still modify and save the file which is supposed to be read-only.
File afile = new File(dir);
if(!afile.exists()){
if(afile.mkdirs()){
File f = new File(dir+filename);
f.setReadOnly();
FileOutputStream out = new FileOutputStream(f);
out.write(utf8);
out.close();
}
}
I can still modify and save the file which is supposed to be read-only.
No, the API implies that in this case it should work in the same format for both File and Directory
http://download.oracle.com/javase/1.5.0/docs/api/java/io/File.html#setReadOnly%28%29
Still I guess how well it works very much depends on the underlying OS.
Check, in you case and if it does not work, then on Unix system
you can use the system command chmod, through the call like Runtime.getRuntime().exec(
Perhaps there is something similar on Windows also
If you use mkdirs() instead of mkdir() it will create all upper folders which are ecessary simpulatenoisly