创build中间文件夹,如果不存在
我正在尝试为用户login的每个用户名创build一个文件夹。 目前我有
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
但File theFile
位不会为用户名创build新的文件夹。 我将如何做到这一点?
我努力了
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(); }
但我需要在程序中稍后使用目的地,我该怎么做?
这是我的整个代码:
/* * 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); } } }
最终编辑(希望)
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); } } }
只是我怎么能打印出新的目的地,并在稍后使用它作为目前它创build新的文件夹,但不select它使用
编辑解决了这个问题:
NewDestination = "C:/Users/Richard/printing~subversion/fileupload/web/WEB-INF/uploaded/" + username;
添加了上面的代码,现在全部工作
你必须实际调用一些方法来创build目录。 只是创build一个file
对象不会在文件系统上创build相应的文件或目录。
您可以使用File#mkdirs()
方法创build目录: –
theFile.mkdirs();
File#mkdir()
和File#mkdirs()
之间的区别在于,如果不存在,则后者将创build任何中间目录。
如果在创build/编辑文件时不存在,则使用此代码spinet创build中间文件夹:
File outFile = new File("/dir1/dir2/dir3/test.file"); outFile.getParentFile().mkdirs(); outFile.createNewFile();
来自Benoit Blanchon的一个很好的Java 7+答案可以在这里find:
在Java 7中,可以使用
Files.createDirectories()
。例如:
Files.createDirectories(Paths.get("/path/to/directory"));