📄 sshremotefilebrowsingconsole.java
字号:
/****************************************************************************** * * Copyright (c) 1999-2003 AppGate Network Security AB. All Rights Reserved. * * This file contains Original Code and/or Modifications of Original Code as * defined in and that are subject to the MindTerm Public Source License, * Version 2.0, (the 'License'). You may not use this file except in compliance * with the License. * * You should have received a copy of the MindTerm Public Source License * along with this software; see the file LICENSE. If not, write to * AppGate Network Security AB, Otterhallegatan 2, SE-41118 Goteborg, SWEDEN * *****************************************************************************/package com.mindbright.ssh;import java.io.*;import java.util.*;import com.mindbright.sshcommon.SSHConsoleRemote;import com.mindbright.sshcommon.SSHFileTransferDialog;import com.mindbright.util.ExpectOutputStream;import com.isnetworks.ssh.*;import java.awt.event.*;public class SSHRemoteFileBrowsingConsole extends AbstractFileBrowser implements ExpectOutputStream.Expector{ private SSHConsoleRemote remote; private OutputStream stdin; private String remoteLSCommand; /** Name of current directory on remote machine */ private String mCurrentDirectory; /** Place to report errors to */ private SSHFileTransferDialog mErrorLog; public SSHRemoteFileBrowsingConsole(FileDisplay fileDisplay, String remoteLSCommand, SSHFileTransferDialog errorLog, SSHConsoleRemote remote, String cwd) { super(fileDisplay); this.remoteLSCommand = remoteLSCommand; this.mErrorLog = errorLog; this.remote = remote; mCurrentDirectory = cwd; } /** * Kick up a new connection to the remote machine, killing the current * one if it's still active */ public void initialize() throws Exception { if(!remote.shell()) { throw new Exception( "Error when connecting with remote machine"); } stdin = remote.getStdIn(); remote.changeStdOut(new ExpectOutputStream(this, "___END_LS___")); changeDirectory(mCurrentDirectory); refresh(); } /** * Shut down the connection to the remote machine if it's active */ public void disconnect() { remote.close(); } /** * Rather ugly way to get the current directory on the server and a list * of files */ public void refresh() throws Exception { StringBuffer command = new StringBuffer(); command.append("echo ___START_PWD___\n"); command.append("pwd\n"); command.append(remoteLSCommand); command.append("echo ___END_LS___\n"); doCommand(command); } /** * Executes a "mkdir" on the remote machine */ public void makeDirectory( String directoryName ) throws Exception { StringBuffer command = new StringBuffer(); command.append( "mkdir \"" ); command.append( directoryName ); command.append( "\"\n" ); doCommand(command); } /** * Executes a "mv" on the remote machine */ public void rename( FileListItem oldFile, String newName ) throws Exception { StringBuffer command = new StringBuffer(); command.append("mv \""); command.append(oldFile.getAbsolutePath()); command.append("\" \""); command.append(oldFile.getParent()); command.append(newName); command.append("\"\n"); doCommand(command); } /** * Does a "cd" on the remote machine */ public void changeDirectory( String directoryName ) throws Exception { StringBuffer command = new StringBuffer(); command.append( "cd \"" ); command.append( directoryName ); command.append( "\"\n" ); doCommand(command); } /** * Does a "rmdir" for directories in the array and a "rm" for files * Will not delete non-empty directories */ public void delete( FileListItem[] fileListItem ) throws Exception { StringBuffer command = new StringBuffer(); for( int i = 0; i < fileListItem.length; i++ ) { if ( fileListItem[ i ].isDirectory() ) { command.append( "rmdir \"" ); } else { command.append( "rm -f \"" ); } command.append( fileListItem[ i ].getAbsolutePath() ); command.append( "\"\n" ); } doCommand(command); } public void doCommand(StringBuffer command) throws Exception { try { stdin.write(command.toString().getBytes()); } catch (IOException e) { throw new Exception("Error sending command to remote machine"); } } /** * User double clicked on a file in the list. Check if it's a directory * and change to it if it is. */ public void fileDoubleClicked(FileListItem fileListItem) throws Exception { if(fileListItem != null && fileListItem.isDirectory()) { StringBuffer command = new StringBuffer(); command.append( "cd \"" ); command.append( fileListItem.getAbsolutePath() ); command.append( "\"\n" ); doCommand(command); } } public void reached(ExpectOutputStream out, byte[] buf, int len) { String captOutput = new String(buf, 0, len); StringTokenizer st = new StringTokenizer(captOutput, "\n"); String line = st.nextToken(); while(line.indexOf("___START_PWD___") == -1) { line = st.nextToken(); } mCurrentDirectory = st.nextToken(); if(!mCurrentDirectory.endsWith("/")) { mCurrentDirectory = mCurrentDirectory + "/"; } if(!mCurrentDirectory.equals("/")) { dirs.addElement(new FileListItem("..", mCurrentDirectory, true, "/" )); } // Parse the file listing while(st.hasMoreTokens()) { line = st.nextToken(); boolean directory = line.endsWith("/"); boolean strip = directory || line.endsWith("@") || line.endsWith("*"); String name = (strip ? line.substring(0, line.length() - 1) : line); FileListItem item = new FileListItem(name, mCurrentDirectory, directory, "/"); if(directory) { dirs.addElement(item); } else { files.addElement(item); } } mFileDisplay.setFileList(dirs, files, mCurrentDirectory, "/"); } public void closed(ExpectOutputStream out, byte[] buf, int len) { /* partial result on close? we're not interested... */ }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -