Crie pastas intermediárias, se não existir

Eu estou tentando criar uma pasta para cada nome de usuário que um usuário faz login. Atualmente tenho

private String destination = "C:/Users/Richard/printing~subversion/fileupload/web/WEB-INF/uploaded/"; // main location for uploads File theFile = new File(destination + username); // will create a sub folder for each user 

mas o bit File theFile não cria uma nova pasta para o nome de usuário. Como eu faria isso ?

eu tentei

 private String destination; public void File() { destination = "C:/Users/Richard/printing~subversion/fileupload/web/WEB-INF/uploaded/"; // main location for uploads File theFile = new File(destination + username); // will create a sub folder for each user (currently does not work, below hopefully is a solution) theFile.mkdirs(); } 

mas eu preciso usar o destino mais tarde no programa, como eu faria isso?

Este é todo o meu código:

 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package richard.fileupload; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.annotation.PostConstruct; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import java.io.File; import org.primefaces.event.FileUploadEvent; @ViewScoped @ManagedBean(name = "fileUploadController") public class FileUploadController { /* public void handleFileUpload(FileUploadEvent event) { System.out.println("called"); FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); FacesContext.getCurrentInstance().addMessage(null, msg); } } */ private String username; private String destination; @PostConstruct public void init() { System.out.println("called get username"); username = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser(); } public void File() { destination = "C:/Users/Richard/printing~subversion/fileupload/web/WEB-INF/uploaded/"; // main location for uploads File theFile = new File(destination + username); // will create a sub folder for each user (currently does not work, below hopefully is a solution) theFile.mkdirs(); } public File getDirectory(String destination, String username) { System.out.println("called get directory"); // currently not working, is not calling the username or destination //set the user directory from the destinarion and the logged user name File directory = new File(destination, username); //check if the location exists if (!directory.exists()) { //let's try to create it try { directory.mkdir(); } catch (SecurityException secEx) { //handle the exception secEx.printStackTrace(System.out); directory = null; } } return directory; } public void handleFileUpload(FileUploadEvent event) { System.out.println("called handle file"); FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); //Displays to user on the webpage FacesContext.getCurrentInstance().addMessage(null, msg); try { copyFile(event.getFile().getFileName(), event.getFile().getInputstream()); } catch (IOException e) { //handle the exception e.printStackTrace(); } } public void copyFile(String fileName, InputStream in) { try { // write the inputStream to a FileOutputStream OutputStream out = new FileOutputStream(new File(destination + fileName)); // cannot find path when adding username atm System.out.println("Called CopyFile"); //testing System.out.println(destination + fileName); int read = 0; byte[] bytes = new byte[1024]; while ((read = in.read(bytes)) != -1) { out.write(bytes, 0, read); } in.close(); out.flush(); out.close(); //make sure new file is created, (displays in glassfish server console not to end user) System.out.println("New file created!");//testing } catch (IOException e) { e.printStackTrace(); FacesMessage error = new FacesMessage("The files were not uploaded!"); FacesContext.getCurrentInstance().addMessage(null, error); } } } 

EDIÇÃO FINAL (esperançosamente)

  public void copyFile(String fileName, InputStream in) { try { destination = "C:/Users/Richard/printing~subversion/fileupload/web/WEB-INF/uploaded/"; // main location for uploads File theFile = new File(destination + "/" + username); theFile.mkdirs();// will create a sub folder for each user (currently does not work, below hopefully is a solution) (DOES NOW WORK) System.out.println("Completed File"); // write the inputStream to a FileOutputStream OutputStream out = new FileOutputStream(new File(destination + fileName)); // cannot find path when adding username atm System.out.println("Called CopyFile"); //testing System.out.println(destination + fileName); int read = 0; byte[] bytes = new byte[1024]; while ((read = in.read(bytes)) != -1) { out.write(bytes, 0, read); } in.close(); out.flush(); out.close(); //make sure new file is created, (displays in glassfish server console not to end user) System.out.println("New file created!");//testing } catch (IOException e) { e.printStackTrace(); FacesMessage error = new FacesMessage("The files were not uploaded!"); FacesContext.getCurrentInstance().addMessage(null, error); } } } 

Como posso imprimir o novo destino e usá-lo mais tarde, pois atualmente ele cria a nova pasta, mas não a seleciona para usar

EDITAR RESOLVIDO ISTO TAMBÉM:

  NewDestination = "C:/Users/Richard/printing~subversion/fileupload/web/WEB-INF/uploaded/" + username; 

Adicionado o código acima e agora tudo funciona

Você tem que realmente chamar algum método para criar os diretórios. Apenas criar um object de file não criará o arquivo ou diretório correspondente no sistema de arquivos.

Você pode usar o método File#mkdirs() para criar o diretório: –

 theFile.mkdirs(); 

Diferença entre File#mkdir() e File#mkdirs() é que, o último criará qualquer diretório intermediário se ele não existir.

Use este código spinet para criar pastas intermediárias, se não existir um ao criar / editar o arquivo:

 File outFile = new File("/dir1/dir2/dir3/test.file"); outFile.getParentFile().mkdirs(); outFile.createNewFile(); 

Uma boa resposta do Java 7+ da Benoit Blanchon pode ser encontrada aqui :

Com o Java 7, você pode usar o Files.createDirectories() .

Por exemplo:

 Files.createDirectories(Paths.get("/path/to/directory"));