58

I have the following code:

List<FileItem> items = uploadHandler.parseRequest(request);
for (FileItem item : items) {
    if (!item.isFormField()) {
        File file = new File("D:/Data");
    }
}

When I am trying to save a file, I am getting the following error

java.io.FileNotFoundException: D:\Data (Access is denied.)

What could be the reason and how can I resolve this? I do have read and write permission on this folder.

5
  • see whether directory is present at "D:/Data" Commented Oct 24, 2013 at 9:01
  • 2
    I would guess it is because you try to open the same file on each iteration of your for loop. Commented Oct 24, 2013 at 9:01
  • It's difficult to say without seeing the code which actually saves the file, or without code that will compile and reproduce the problem, but I'm guessing maybe the file already exists (or a directory exists with that name)? Also, note that on Windows files are not case sensitive. Commented Oct 24, 2013 at 9:03
  • you should use File.separatorChar to make your code as per standard instead os using '/' or '\'. Commented Oct 24, 2013 at 9:08
  • No line of the above code can throw a FilNotFoundException. Where exactly does the exception being thrown and what is the code around it? Commented Oct 24, 2013 at 9:10

5 Answers 5

108

When you create a new File, you are supposed to provide the file name, not only the directory you want to put your file in.

Try with something like

File file = new File("D:/Data/" + item.getFileName());
Sign up to request clarification or add additional context in comments.

1 Comment

Just a note, the opposite can also be true. I once wrote a directory as a file to a zip and when unzipping I got this error (because that directory already existed)
22

Not exactly the case of this question but can be helpful. I got this exception when i call mkdirs() on new file instead of its parent

File file = new java.io.File(path);
//file.mkdirs(); // wrong! 
file.getParentFile().mkdirs(); // correct!
if (!file.exists()) {
    file.createNewFile();
} 

Comments

8

I have search for this problem and i got the following answers:

  1. "C:\Program Files\Apache-tomcat-7.0.69\" remove the extra backslash (\)
  2. Right click the log folder in tomcat folder and in security tab give this folder as a write-permission and then restart the net-beans as an run as administrator.

Your problem will be solved

2 Comments

I just had to remove the end backslash
From which place should I remove backslash?
5

You need to set permission for the user controls .

  1. Goto C:\Program Files\
  2. Right click java folder, click properties. Select the security tab.
  3. There, click on "Edit" button, which will pop up PERMISSIONS FOR JAVA window.
  4. Click on Add, which will pop up a new window. In that, in the "Enter object name" box, Enter your user account name, and click okay(if already exist, skip this step).
  5. Now in "PERMISSIONS OF JAVA" window, you will see several clickable options like CREATOR OWNER, SYSTEM, among them is your username. Click on it, and check mark the FULL CONTROL option in Permissions for sub window.
  6. Finally, Hit apply and okay.

1 Comment

This is changing the permissions on the Java executables themselves. There's no reason to do this.
4

Make sure that the directory exists, you have permission to access it and add the file to the path to write the log:

File file = new File("D:/Data/" + item.getFileName());

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.