Прочитать файл из другого места, используя JSch - PullRequest
2 голосов
/ 19 июля 2011

Вот мой код для чтения файла из другого места с использованием JSch

import com.jcraft.jsch.*;
import java.io.BufferedReader;
import java.io.*;
import java.util.Vector;

public class SftpClient {
    public static void main(String args[]) {
        JSch jsch = new JSch();
        Session session = null;
        FileReader reader =null;
        BufferedReader buffer = null;
        try 
        {
.
            session = jsch.getSession("userName", "Ip Address");
            java.util.Properties config = new java.util.Properties(); 
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);  
            session.setPassword("password");                
            session.connect();              
            Channel channel = session.openChannel("sftp");
            channel.connect();
            ChannelSftp sftpChannel = (ChannelSftp) channel;
            System.out.println("Is connected to IP:"+channel.isConnected());
            Vector ls=sftpChannel.ls("/misc/downloads/");
            for(int i=0;i<ls.size();i++){
               System.out.println("Ls:"+ls.get(i));
            }
            sftpChannel.cd("/misc/downloads/");             
            File file = new File("Text.txt");
            sftpChannel.put(new FileInputStream(file),"Text.txt");              
            reader = new FileReader(file);
            buffer = new BufferedReader(reader);                
            String getLine = "";
            while ((getLine = buffer.readLine())!=null)
            {
               System.out.println("Line: "+getLine);
            }
            sftpChannel.exit();             
            session.disconnect();
        }
        catch (JSchException e) {
            e.printStackTrace();
        }
        catch (Exception e){
            e.printStackTrace();
        } 
        finally{
            try{
               if(reader!=null)
                  reader.close();
               if(buffer!=null)
                  buffer.close();
            }
            catch(Exception e){
               System.out.println("Exception:"+e);
            }
        }
    }

}

Вывод кода:

Is connected to IP:true
Ls:-rw-r--r--    1 root     root          733 Jul 19 17:46 Text.txt
java.io.FileNotFoundException: Text.txt (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:103)
    at SftpClient.main(SftpClient.java:34)

Яполучаю FileNotFoundException, но перед этим я сделал SOP, чтобы вывести список всех файлов в / misc / downloads / path с помощью ls.

Что я могу сделать, чтобы решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 20 июля 2011

FileInputStream пытается прочитать файл из вашей локальной файловой системы (где он не существует), в то время как кажется, что вы действительно хотите прочитать его из удаленной файловой системы. Или вы хотите загрузить его в локальную систему, а затем прочитать оттуда?

В любом случае, для загрузки с удаленной стороны используйте один из get методов из ChannelSftp, а не put (для загрузки).

1 голос
/ 19 июля 2011

Вы можете рассмотреть возможность использования Apache VFS для чтения удаленных файлов.Это простая и мощная библиотека.

...