1、在windows用java远程服务器获取对应路径下的文件名

import java.io.*;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.Assert;

import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.StreamGobbler;


/**
 * 遍历出远程服务器上指定目录下的所有文件夹
 *
 * @author WangSong
 *
 */
public class GetAllSubfolders {

   public static void main(String[] args){
	
	  //输入服务器地址,用户名,密码,路径	
      getSubfolderName("10.254.XX.XX","root","pasword","/opt/job/TagFile");
      
    }


    private GetAllSubfolders(){}

    /**
     * 得到服务器上指定文件夹下所有子文件夹(第一级子文件夹)
     * @return
     */
    public static List<String> getSubfolderName(String romoteAddr,String username,
                                                String password,String targetFolder) {

        List<String> folderNameList = new ArrayList<String>();
        try {
            Connection connection = new Connection(romoteAddr);// 创建一个连接实例
            connection.connect();// Now connect
            boolean isAuthenticated = connection.authenticateWithPassword(username, password);//認證
            Assert.isTrue(isAuthenticated, "用戶名或密碼錯誤!");
            ch.ethz.ssh2.Session sess = connection.openSession();// 創建一個會話
            sess.requestPTY("bash");
            sess.startShell();
            InputStream stdout = new StreamGobbler(sess.getStdout());
            InputStream stderr = new StreamGobbler(sess.getStderr());
            BufferedReader stdoutReader = new BufferedReader(new InputStreamReader(stdout));
            BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stderr));
            //向服务器上输入命令
            PrintWriter out = new PrintWriter(sess.getStdin());
            out.println("cd " + targetFolder);//進入日志文件存放的目录
            out.println("ll");
            out.println("exit");
            out.close();
            sess.waitForCondition(ChannelCondition.CLOSED|ChannelCondition.EOF | ChannelCondition.EXIT_STATUS,30000);

            //本机查看远程操作的指令及状态
            System.out.println("输入指令后对应的显示信息:");
            while (true) {
                String line = stdoutReader.readLine();
                if (line == null)
                    break;
//                System.out.println(line);
                //获取文件名称
                if(line.contains("-rw-r--r--")){
                    //取出正确的文件名称
                    StringBuffer sb =
                            new StringBuffer(line.substring(line.lastIndexOf(":")+3, line.length()));
//                    line = sb.toString().replace(" ", "/opt/job/TagFile/");
                    line = sb.toString().replace(" ", "/opt/job/TagFile/");
                    folderNameList.add(line);

//                    System.out.println(line);
                }
            }
            System.out.println("ExitCode: " + sess.getExitStatus());
            System.out.println(folderNameList);

            //关闭连接
            sess.close();
            connection.close();
            stderrReader.close();
            stdoutReader.close();
        } catch (IOException e) {
            e.printStackTrace(System.err);
            System.exit(2);
        }
        return folderNameList;
    }
 }   

2、linux下,用java获取linux本地路径下的文件

    public static ArrayList<String> queryFileNames(String filePath){
        ArrayList<String> es = new ArrayList<>();
        File f = new File(filePath);
        File[] ts = f.listFiles();
        File[] fs = f.listFiles();
        for (int i =0 ; i < fs.length ; i++){
            if (ts[i].isFile()){
                es.add(ts[i].toString());
            }
        }
//获取目录下csv后缀的文件名
//        for (int j = 0; j<es.size();j++){
//            if (es.get(j).indexOf("csv")>0) {
//                System.out.println(es.get(j));
//            }
//        }
        return es;
    }
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐