2013-02-02 16 views
37

Sto provando a creare una cartella per ogni nome utente a cui un utente accede come. Attualmente hoCrea cartelle intermedie se non ne esiste una

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 

ma il bit File theFile non crea una nuova cartella per il nome utente. Come lo farei?

ho cercato

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(); 
} 

ma ho bisogno di utilizzare la destinazione più avanti nel programma, come avrei fatto?

Questo è tutto il mio codice:

/* 
* 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); 
     } 
    } 
} 

montaggio finale (si spera)

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); 
     } 
    } 
} 

Proprio come posso stampare la nuova destinazione e utilizzare questo più avanti, come attualmente si crea la nuova cartella ma non seleziona in modo da utilizzare

EDIT RISOLTO anche questo:

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

Aggiunto il codice sopra e ora tutto funziona

+1

possibile duplicato del [Crea automaticamente tutto il percorso quando si scrive in un nuovo file] (http://stackoverflow.com/questions/2833853/create-whole-path-automatically -when-writing-to-a-new-file) –

risposta

102

In realtà è necessario chiamare un metodo per creare le directory. La semplice creazione di un oggetto file non creerà il file o la directory corrispondente sul file system.

È possibile utilizzare File#mkdirs() metodo per creare la directory: -

theFile.mkdirs(); 

Differenza tra File#mkdir() e File#mkdirs() è che, il più tardi creerà una qualsiasi directory intermedia se non esiste.

+0

Grazie a un mucchio :) lo testeremo: D – user1924104

+1

@ user1924104 .. Prego :) –

+0

domanda sciocca, sono ancora estremamente nuova in Java, ma come fare io uso mkdir? Ive ha esaminato alcuni esempi e sono tutti utilizzati in modi diversi – user1924104

14

utilizzare questo codice spinetta per creare cartelle intermedie se non ne esiste durante la creazione/modifica di file:

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

Si prega di modificare con ulteriori informazioni. Le risposte solo per codice e "prova questo" sono scoraggiate, perché non contengono contenuti ricercabili e non spiegano perché qualcuno dovrebbe "provare questo". Facciamo uno sforzo qui per essere una risorsa per la conoscenza. – abarisone

+0

risponde alla domanda come creare un file da una stringa in modo infallibile – Mishax

Problemi correlati