3

我想在我的网页中创建一个浏览按钮来选择目录而不是文件。我知道输入类型文件在这里不起作用,但有什么办法可以用 Javascript 来做到这一点。我想获取客户端机器的文件路径,这在 IE 中是可能的,但其他浏览器不支持,但这对我来说很好。

我被卡住的方式是如何在按钮中获取文件目录。

下面是我用来从浏览器调用小程序的代码,但我从引导类路径中检测到:浏览器中的 C:\PROGRA~1\Java\jre7\lib\deploy.jar 错误。我已经使用 Java 1.5 编译了类文件

<applet code="com.life.draw.BrowsePage.class"></applet>

代码

public class BrowsePage extends JApplet {
@Override
public void paint(Graphics g) {
    // TODO Auto-generated method stub
    JFileChooser chooser = new JFileChooser();
    chooser.setCurrentDirectory(new java.io.File("."));
    chooser.setDialogTitle("Browse the folder to process");
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    chooser.setAcceptAllFileFilterUsed(false);

    if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
        System.out.println("getCurrentDirectory(): "+ chooser.getCurrentDirectory());
        System.out.println("getSelectedFile() : "+ chooser.getSelectedFile());
    } else {
        System.out.println("No Selection ");
    }
}
}
4

2 回答 2

3

你为什么在你的paint方法中调用它?这很可能是在每次小程序出现时都试图创建新窗口painted

public void paint(Graphics g) {
    // TODO Auto-generated method stub
    JFileChooser chooser = new JFileChooser();
    /*...*/

JButton相反,在您的方法中创建一个init并附加一个ActionListener...

public void init() {
    setLayout(new GridBagLayout());
    JButton browse = new JButton("...");
    browse.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            JFileChooser chooser = new JFileChooser();
            chooser.setCurrentDirectory(new java.io.File("."));
            chooser.setDialogTitle("Browse the folder to process");
            chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            chooser.setAcceptAllFileFilterUsed(false);

            if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                System.out.println("getCurrentDirectory(): "+ chooser.getCurrentDirectory());
                System.out.println("getSelectedFile() : "+ chooser.getSelectedFile());
            } else {
                System.out.println("No Selection ");
            }
        }
    });
    add(browse);
}

您可能还想看看小程序可以做什么和不能做什么

于 2013-08-27T07:55:44.503 回答
2

在 Web 浏览器中获得本地浏览对话的唯一方法是使用<input type="file"/>,或者使用 Java Applet 或 Adob​​e Flash 插件。没有内置方法可以在 Web 浏览器中从 JS 获取目录引用。

此外,您无法读取客户端硬盘的内容,甚至无法通过 JavaScript 启动浏览对话。如果可以,它将带来相当大的安全问题。

关于读取目录,请查看以下帖子:

使用 javascript 访问本地文件

在不上传的情况下获取本地文件的内容

Javascript:获取本地服务器端文件的内容

听起来,您将需要编写一个 Flash 插件,让您可以在本地选择一个目录。不过,您的用户在下载插件时会收到安全警告。

编辑:

还有基于 webkit 的方法,但这仅适用于基于 webkit 的浏览器(Chrome、Safari 等)。

如何在我自己的代码中使用 Google Chrome 11 的上传文件夹功能?

于 2013-08-20T10:25:07.043 回答