2

我已经进行了一些搜索,但我没有找到任何相关信息。

我计划为我的服务器用java编写一个完整的远程工具。我已经成功地制作了将文件发送到服务器的部分,但现在我想使用文件浏览器列出并获取所有文件。我知道如何制作本地 jFileChooser,但可以远程制作吗?

我使用套接字连接到我的服务器。

谢谢。

4

4 回答 4

4

有人实际上已经制作了您正在尝试的东西并将其托管在 sourceforge 上。您也可以获取源代码。检查vfsjfilechooser

要比较 vjsfilechooser 方法和 JFileChooser API,您可以阅读下面提到的 url。 http://www.loni.ucla.edu/twiki/bin/view/CCB/VFSBrowserProgrammersGuide?skin=plain&sortcol=1&table=1&up=1

于 2012-04-17T09:10:54.937 回答
1

我不认为您可以将 JFileChooser 配置为远程,但您应该能够根据其代码编写自己的代码,甚至对其进行子类化。

如果您要编写一个外观类似的 Windows 文件选择器,通常被认为更好。

您可以将它基于 VFS 或类似的,以便它可以与任何文件系统一起使用。

于 2012-04-17T09:10:14.403 回答
1

假设它是一个基于 Web 的应用程序,您想从应用程序服务器中选择一个文件。检查这是否真的是一个好选择,因为我可以清楚地了解服务器文件结构。肯定会有安全威胁。

于 2012-04-17T09:42:24.030 回答
0
package learnings;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

public class SimpleLinuxGUI {

String sshremotedir = "GiveRemoteDirectoryPath";
public static void cargarRTree(String remotePath, DefaultMutableTreeNode parent) throws SftpException, JSchException { 
//todo: change "/" por remote file.separator
JSch jsch = new JSch();
Session session = null;
session = jsch.getSession(username, hostname, 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
Vector<ChannelSftp.LsEntry> list = sftpChannel.ls(remotePath); // List source directory structure.
    System.out.println(list);
//Vector<ChannelSftp.LsEntry> list = sftpChannel
for (ChannelSftp.LsEntry oListItem : list) { // Iterate objects in the list to get file/folder names.       
    DefaultMutableTreeNode node = new DefaultMutableTreeNode(oListItem.getFilename());
    if (!oListItem.getAttrs().isDir()) { // If it is a file (not a directory).
        parent.add(node); // add as a child node
    } else{
        if (!".".equals(oListItem.getFilename()) && !"..".equals(oListItem.getFilename())) {
            parent.add(node); // add as a child node
            cargarRTree(remotePath + "/" + oListItem.getFilename(), node); // call again for the subdirectory
        }
    }
}

}

public static void main(String[] args) {
    SimpleLinuxGUI slg = new SimpleLinuxGUI();
    JFrame jf = new JFrame();


    DefaultMutableTreeNode nroot = new DefaultMutableTreeNode(slg.sshremotedir);                
    try {
        cargarRTree(slg.sshremotedir, nroot);
    } catch (SftpException e1) {
// TODO Auto-generated catch block
        e1.printStackTrace();
    }       catch (JSchException ex) { 
        Logger.getLogger(SimpleLinuxGUI.class.getName()).log(Level.SEVERE, null, ex);
    } 
    JTree yourJTree = new JTree(nroot);
    jf.add(yourJTree);
    jf.setSize(640, 480);
    jf.setVisible(true);
}

}

此代码将帮助您获取远程服务器中的文件和目录列表,然后在 GUI 中创建一个 Jtree 和显示。现在您可以通过添加动作侦听器和添加按钮来更改 GUI 以满足您的要求

于 2015-10-12T15:27:32.247 回答