我不想指定目录。 我只是希望它自动地“知道”,并在用户工作目录中打开。我该怎么办呢?
Answer 1:
这方面的例子默认为user.dir
对第一表示。 然后,它保留了选择器的情况下自动跟踪最近加载或保存位置,通过MadProgrammer的建议。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.io.*;
public class ChooserInCurrentDir {
// the GUI as seen by the user (without frame)
JPanel gui = new JPanel(new BorderLayout());
JFileChooser fileChooser;
private JTextArea output = new JTextArea(10, 40);
ChooserInCurrentDir() {
initComponents();
}
public final void initComponents() {
gui.setBorder(new EmptyBorder(2, 3, 2, 3));
String userDirLocation = System.getProperty("user.dir");
File userDir = new File(userDirLocation);
// default to user directory
fileChooser = new JFileChooser(userDir);
Action open = new AbstractAction("Open") {
@Override
public void actionPerformed(ActionEvent e) {
int result = fileChooser.showOpenDialog(gui);
if (result == JFileChooser.APPROVE_OPTION) {
try {
File f = fileChooser.getSelectedFile();
FileReader fr = new FileReader(f);
output.read(fr, f);
fr.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
};
Action save = new AbstractAction("Save") {
@Override
public void actionPerformed(ActionEvent e) {
int result = fileChooser.showSaveDialog(gui);
throw new UnsupportedOperationException("Not supported yet.");
}
};
JToolBar tb = new JToolBar();
gui.add(tb, BorderLayout.PAGE_START);
tb.add(open);
tb.add(save);
output.setWrapStyleWord(true);
output.setLineWrap(true);
gui.add(new JScrollPane(
output,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
}
public final JComponent getGui() {
return gui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
ChooserInCurrentDir cicd = new ChooserInCurrentDir();
JFrame f = new JFrame("Chooser In Current Dir");
f.add(cicd.getGui());
// Ensures JVM closes after frame(s) closed and
// all non-daemon threads are finished
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// See http://stackoverflow.com/a/7143398/418556 for demo.
f.setLocationByPlatform(true);
// ensures the frame is the minimum size it needs to be
// in order display the components within it
f.pack();
// should be done last, to avoid flickering, moving,
// resizing artifacts.
f.setVisible(true);
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency
SwingUtilities.invokeLater(r);
}
}
Answer 2:
基本上,你不能。 你需要告诉它。
当与构建null
currentDirectory
(如默认的构造函数),它将使用FileSystemView#getDefaultDirectory
。
您可以创建的单个实例JFileChooser
每个基本任务(一个用于保存,一个用于打开例如)和简单维护的实例,它将“记住”,它用的是最后的目录,你仍然需要它的种子有起始目录,虽然
另一种选择是构建某种库调用,可以加载和保存最后一个目录基于一些独特的键使用的用户的。 这意味着你可以简单地做这样的事情?
File toFile = MyAwesomeLibrary.getSaveFile(APPLICATION_DOCUMENT_SAVE_KEY);
这将加载附带的密钥最后已知的目录中,并显示JFileChooser
与价值配置,并且将能够返回选定的File
或null
;如果用户取消操作...例如...
Answer 3:
如果你想设置他们在文件选择的前一开放的目录,你需要设置当前目录。
//This will set the directory to the directory they previously chose a file from.
fileChooser.setCurrentDirectory(fileChooser.getCurrentDirectory());
林不知道这是不是你要找的是什么,但是,当他们选择一个文件,然后去选择其他文件,它会保持他们在从以前选择的目录。
Answer 4:
如果你希望你的应用程序来寻找用户的工作目录,你可以试试这个:
String curDir = System.getProperty("user.dir");
文章来源: How do I make JFileChooser open in the current directory the user is in?