Erstellen Sie Zwischenordner, falls noch keiner existiert
Ich versuche einen Ordner zu erstellen, für jeden Benutzernamen ein Benutzer anmeldet. Derzeit habe ich
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
aber die File theFile
bit nicht erstellen Sie einen neuen Ordner für den Benutzernamen. Wie kann ich dies tun ?
Habe ich versucht
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();
}
aber ich muss an dem Ziel später im Programm, wie soll ich das tun?
Dies ist mein ganzer code:
/*
* 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);
}
}
}
FINAL EDIT (Hoffentlich)
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);
}
}
}
Nur wie kann ich drucken Sie das neue Ziel und dieses dann später wie es derzeit entsteht der neue Ordner aber nicht wählen, es zu benutzen
BEARBEITEN SIE GELÖST AUCH DIES :
NewDestination = "C:/Users/Richard/printing~subversion/fileupload/web/WEB-INF/uploaded/" + username;
Hinzugefügt, die obigen code und jetzt funktioniert es
Kommentar zu dem Problem
möglich, Duplikat der Erstellen Sie ganze Pfad automatisch beim schreiben einer neuen Datei
InformationsquelleAutor der Frage user1924104 | 2013-02-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie, um tatsächlich rufen Sie eine Methode, um die Verzeichnisse zu erstellen. Nur die Schaffung eines
file
Objekt nicht erstellen Sie die entsprechende Datei oder das Verzeichnis auf dem Dateisystem.Können Sie
File#mkdirs()
Methode, um das Verzeichnis zu erstellen: -Unterschied zwischen
File#mkdir()
undFile#mkdirs()
ist, dass, die Sie später erstellen werden, in einem solchen Verzeichnis, wenn es nicht vorhanden ist.InformationsquelleAutor der Antwort Rohit Jain
Verwenden Sie diesen code, Spinett zum erstellen intermediate Ordner (falls nicht vorhanden) beim erstellen/Bearbeiten von Datei:
InformationsquelleAutor der Antwort Shashi Ranjan
Einen schönen Java-7+ Antwort von Benoit Blanchon finden hier:
InformationsquelleAutor der Antwort dlauzon