При записи в файл на Java файл не может быть сохранен в папках - PullRequest
0 голосов
/ 06 марта 2012

То, что я пытаюсь сделать, это просто позволить пользователю выбрать каталог для сохранения текстового файла. Проблема в том, что я пытаюсь выбрать папку, которую я создаю на моем рабочем столе, но когда я выбираю папку с помощью JFileChooser и позволяю коду сделать работу, она все еще сохраняется вне папки и на рабочем столе .. Почему? Может кто-нибудь, пожалуйста, объясните, что я сделал не так, чтобы я мог чему-то научиться ..

public class TextFileSaver {

String filePath;//Used in the setPath and getPath methods
String filename = File.separator+"tmp"; //Used for the JFileChoosers directory

public TextFileSaver(){
    //Get our file saver to the screen
    JFileChooser fc = new JFileChooser(new File(filename));

    fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); //Only able to select directiories

    // Show open dialog; this method does not return until the dialog is closed
    fc.showSaveDialog(null);
    File selectedLocation = fc.getCurrentDirectory(); //Gets the selected Location

    //Sets the path of the file so we can read from it.
    setPath(selectedLocation.getAbsolutePath());

    FileName();

    try {
        SaveFile(filePath);
    } 
    catch (IOException ex) {
        Logger.getLogger(TextFileSaver.class.getName()).log(Level.SEVERE, null, ex);

        //Show a message dialog
        JOptionPane.showMessageDialog(null, "The file could not be saved, Please try again.", 
            "Error", JOptionPane.ERROR_MESSAGE);
    }
}

public void setPath(String Path){
    filePath = Path;
}

public String getPath(){
    return filePath;
}

private void FileName(){
    String name = JOptionPane.showInputDialog
            ("What name do you want to give the file?");

    //Temporary code bellow will change to StringBuilder here.
    filePath = filePath + "/" + name + ".txt";
}

private void SaveFile(String Path) throws IOException{

    System.out.println(Path);

    //The outStream that we will use to write to the text file the user is creating.
    PrintWriter outStream = new PrintWriter(new BufferedWriter(new FileWriter(Path)));

    outStream.println("Test text!");
    outStream.close();
}
}

Все методы выполняются через конструктор. Таким образом, код происходит шаг за шагом.

1 Ответ

3 голосов
/ 06 марта 2012

Используйте getSelectedFile(), а не getCurrentDirectory(), а также вы должны добавить куда-нибудь свой filePath.

...