Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считать файл из ftp 
:(
    Опции темы
Wanderer2019
Дата 3.12.2004, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: нет
Всего: 17



Здравствуйте еще разок!
Не знает ли кто нибудь можно ли считать содержимое файла на ftp не копируя его на локальный диск? слышал как то можно создать BufferedReader на удаленный файл, но никак не получается!!! S--O--S .... S--O--S ... S--O--S ... S--O--S smile

P.S. Зарегистрировался! smile
PM ICQ MSN   Вверх
Domestic Cat
Дата 4.12.2004, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 1
Всего: 172



Если ты сам не сохранаешь файл, то на диске он не появится. Очевидно для чтения из ftp используется к-л InputStream, и если этот стрим не пишет на диск, то файл собственно и находится в памяти.
Постарайся сформулировать вопрос почетче, проблема в создании стрима или в чем-то еще?



--------------------

PM   Вверх
igon
Дата 4.12.2004, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 2
Всего: 21



Во второй ссылке, которую давал DomesticCat в топике, так преждевременно тобой покинутом (вместе с этим вопросом smile), приводятся два примера. Ты, видимо. попытался использовать первый. А для твоих задач - лучше второй, с добавлением BufferedInputStream.

Код

URL url = new URL("ftp://user01:[email protected]/README.txt;type=i");
URLConnection urlc = url.openConnection();
BufferedInputStream bis = new BufferedInputStream(urlc.getInputStream()); // To download


А уж из bis методом read() можешь читать и сохранять куда угодно


--------------------
Хотите поговорить об этом?
PM   Вверх
Domestic Cat
Дата 4.12.2004, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 1
Всего: 172



Цитата(igon @ 3.12.2004, 20:33)
так преждевременно тобой покинутом (вместе с этим вопросом smile)


Перекинул я, тк. по правилам - один вопрос на одну тему smile


--------------------

PM   Вверх
Wanderer2019
Дата 4.12.2004, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: нет
Всего: 17



OKay! Предположим имеется некий ftp Сервер на котором в дериктории dir находятся текстовые файлы, иформация в которых меня и интересует. Я знаю имя файла. Коннект к ftp средствами commons net. Вопрос: как считать информацию из этого файла (прямо с ftp, не делая копию на локальном диске)? или это не возможно и объязательно нужно копировать файл на HDD? если у кого есть какие нибудь примеры!!!! Всем спасибо!
Добавлено @ 14:58
да забыл сказать URL не совсем подходит т.к. на ftp стоит проверка подлинности пользователя! или можно и с помощью URLConnection входить по паролю и логину?
PM ICQ MSN   Вверх
igon
Дата 5.12.2004, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 2
Всего: 21



За повторение вопроса - спасибо smile
После моего ответа проблема осталась? smile

Код

user01:pass1234

в
Код

URL url = new URL("ftp://user01:[email protected]/README.txt;type=i");

разве не логин и пароль?


--------------------
Хотите поговорить об этом?
PM   Вверх
Wanderer2019
Дата 5.12.2004, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: нет
Всего: 17



Вариант конечно не плохой. Спасибо! А возможно сделать что либо подобное через FTPClient?
PM ICQ MSN   Вверх
igon
Дата 5.12.2004, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 2
Всего: 21



FTPClient не входит в SDK 1.4, которым я пользуюсь - так что, увы...smile
Посмотри здесь:
http://www.enterprisedt.com/downloads/ftp/.../FTPClient.html

(после беглого просмотра) Похоже, это подойдет:

Цитата
get
public byte[] get(java.lang.String remoteFile)
          throws java.io.IOException,
                  FTPException
Get data from the FTP server. Transfers in whatever mode we are in. Retrieve as a byte array. Note that we may experience memory limitations as the entire file must be held in memory at one time.

Parameters:
remoteFile - name of remote file in current directory
java.io.IOException
FTPException


Это сообщение отредактировал(а) igon - 5.12.2004, 21:44


--------------------
Хотите поговорить об этом?
PM   Вверх
Aver91
Дата 24.12.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.5.2009

Репутация: нет
Всего: нет



Всем добрый вечер, решил задать небольшие вопросы касаемо подключений к ftp здесь, чтобы не плодить одинаковых тем.  
Код

public class FTP implements Runnable{
    Thread t =null;
    static Socket first=null;
    static Socket second =null;
    static DataInputStream reccmd = null;
    static PrintStream setcmd = null;
    static FileOutputStream outf=null;
    static InputStream out=null;
    static String reply=null;
    byte []get;
    FTP(){
        t=new Thread(this,"down");
        System.out.println("запускаем поток");
        t.start();
        }
    public void run() {
        
        try {
            second=new Socket ("IP",20);
            System.out.println("второй сокет подключен"+second.isConnected());
                    out=second.getInputStream();
            out.read(get);
            //запись в файл
            out.close();
            second.close();
        } catch (UnknownHostException e1) {
        
            e1.printStackTrace();
        } catch (IOException e1) {
        
            e1.printStackTrace();
        }
        
}
    
public static void main(String[] args) throws UnknownHostException, IOException
     {first = new Socket("IP",21);
     reccmd = new DataInputStream(first.getInputStream());
     setcmd = new PrintStream(first.getOutputStream());

    //происходит общение с сервером
 try{
      FTP thr=new FTP();
     FTP.t.join(); }
     
catch(InterruptedException e){System.out.println("главный прерван");}
     first.close();
    reccmd.close();
    setcmd.close();
         
     }
}


суть проблемы: я создаю подключение к серверу для общения с помощью first. в таком случае сетевая карта уже занята подключением. как сделать 2ое подключение? есть ли смысл использовать URL?
ЗЫ: в программе нельзя использовать дополнительные модули типа org.apache.commons.net.ftp
работаю в среде eclipse для J2SE



Это сообщение отредактировал(а) Aver91 - 25.12.2009, 16:40
PM MAIL   Вверх
LSD
Дата 25.12.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Цитата(Aver91 @  24.12.2009,  18:43 Найти цитируемый пост)
ЗЫ: в программе нельзя использовать дополнительные модули типа org.apache.commons.net.ftp

Что-то я в принципе не вижу никаких commons-net.



Цитата(Aver91 @  24.12.2009,  18:43 Найти цитируемый пост)
суть проблемы: я создаю подключение к серверу для общения с помощью first. в таком случае сетевая карта уже занята подключением. как сделать 2ое подключение?

Сетевая карта, может одновременно обслуживать гораздо больше, чем одно подключение. И вообще, почему у тебя второй поток подключается на 20 порт?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Aver91
Дата 25.12.2009, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.5.2009

Репутация: нет
Всего: нет



Цитата(LSD @ 25.12.2009,  17:59)
Цитата(Aver91 @  24.12.2009,  18:43 Найти цитируемый пост)
ЗЫ: в программе нельзя использовать дополнительные модули типа org.apache.commons.net.ftp

Что-то я в принципе не вижу никаких commons-net.



Цитата(Aver91 @  24.12.2009,  18:43 Найти цитируемый пост)
суть проблемы: я создаю подключение к серверу для общения с помощью first. в таком случае сетевая карта уже занята подключением. как сделать 2ое подключение?

Сетевая карта, может одновременно обслуживать гораздо больше, чем одно подключение. И вообще, почему у тебя второй поток подключается на 20 порт?

ну вот я собственно и не добавил их. написал за тем, чтобы не предлагали ссылки на подобные модули

порт я просто так ему задал. с пассивным режимом я плохо понимаю, поэтому решил делать передачу в активном. на 20 порт сервер дает положительный ответ когда посылаю ему команду PORT

Добавлено через 12 минут и 1 секунду
хотя сейчас я пассивный попробовал и разобрался как порт взять из ответа сервера. но суть проблемы остается. у меня второе подключение не создается
PM MAIL   Вверх
Egik2
Дата 25.12.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 29.7.2008
Где: Агудзера

Репутация: 1
Всего: 11




Wanderer2019, ты  sun.net.ftp.FTPClient имел в виду?
Тогда простейший пример кода:
Код

import sun.net.ftp.FtpClient;
import sun.net.TelnetInputStream;

import java.io.IOException;

/**
 * Created by IntelliJ IDEA.
 * User: Egik
 * Date: 25.12.2009
 * Time: 21:44:08
 */
public class Main {
    public static void main(String args[]) {
        FtpClient f = null;
        try {
            f = new FtpClient("ftp.yandex.ru");
            f.login("anonymous", "qwerty");
            TelnetInputStream t = f.get("HEADER.txt");
            byte[] b = new byte[200];
            //читаю по 200 байт из файла HEADER.txt
            int readed = t.read(b);
            while(t.read(b) > 0) {
                 System.out.println(new String(b));
            }

        } catch (IOException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }

    }
}




Это сообщение отредактировал(а) Egik2 - 25.12.2009, 21:59


--------------------
Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall)
a-nav.com
developer-blog.ru
world-poetry.org
PM MAIL WWW ICQ   Вверх
ICEMAN3141592
Дата 29.12.2009, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



Привет всем, вопрос туда же... Есть код (отрывочек)
String host = "ftp.yandex.ru";
String user = "anonymous";
String password = "2f9781da46";

System.out.println("Connecting to host " + host);
      m_client = new FtpClient();
      m_client.openServer(host);
      System.out.println("Connecting to host " + host);
      m_client.setConnectTimeout(2000000);
      m_client.login(user, password);
      System.out.println("User " + user + " login OK");
      getFileSize(m_client, "1.jpg");
      System.out.println(m_client.welcomeMsg);
      m_client.cd(sDir);
      System.out.println("Directory: " + sDir);
      m_client.binary();
      System.out.println("Success.");
---------------------------------------------------------------------------------------------------------------------------------------------------
так работает, а вот host = "ftp.filehoster.ru"; user = "user219611"; password = "2f9781da46"; 
то уже нет... пишет, что время подсоединения вышло, но я жчерез проводник захожу и все нормально, хочу скачать файл 1.jpg и не фига... Пожалуйста
PM MAIL   Вверх
Aver91
Дата 2.1.2010, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.5.2009

Репутация: нет
Всего: нет



вопрос с подключением 2-го сокета решен. возник другой: как лучше информацию из входящего потока в байтовом виде записать в файл? через байтовый массив? и считывать например из потока по 200 байт и писать их в файл?
PM MAIL   Вверх
LSD
Дата 4.1.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Цитата(Aver91 @  2.1.2010,  23:16 Найти цитируемый пост)
и считывать например из потока по 200 байт и писать их в файл?

Лучше по 4 -16 килобайт.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Aver91
Дата 6.1.2010, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 8.5.2009

Репутация: нет
Всего: нет



LSD, спасибо за помощь, решил обойтись без массива и писать напрямую в файл. записывание байтов прерывается, когда файл достигает размера, который выслал сервер командой SIZE. проблема вроде бы как решена
PM MAIL   Вверх
gochu
Дата 27.11.2010, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 27.11.2010

Репутация: нет
Всего: нет



Доброго времени суток!
У меня следующая проблема. На ftp-сервере лежит текстовый файл, суть плоская база даный, состоящаю из строк. 
Каждая строка имеет 8 (первых) однохначноиденетифицирующих ее симовлов.
...
00000576 06 140 12 Disboscatore 32 
00002680 06 140 3 Disboscatore 32 
00004285 06 140 26 Disboscatore 32 
00004315 06 100 5 Disboscatore 32 
00004380 06 140 15 Disboscatore 32 
...
Задача: по введенным 8 символам, провести поиск и выведение на екран строки, где этот код и находиться.

Проблема.... telnet не копирует надлежащим образом символы перевода строки на hdd, что, на мой взгяд, есть первым этапом решения задачи.
Вторым, я надеюсь, после решеиня первой, будет поиск по скопированому тестовику строки и ее вывод, 
Код

FtpClient f = null;
        try {
            f = new FtpClient("127.0.0.1");
            f.login("1", "1");
            TelnetInputStream t = f.get("/indexcat.txt");
            //FilterInputStream  ler =  t;
            BufferedInputStream bb = new BufferedInputStream(t);
            byte[] b1 = new byte[1];
            //int readed = t.read(b1);

            File fw = new File("c:\\temp\\srch.txt");
            FileWriter fop = new FileWriter(fw);
            while(t.read(b1) > 0) {
                             fop.write(new String(b1));
                             //System.out.println(new String(b1));
            }
Еще одна проблема появилась по ходу действия, файл не копируется полностью. writer ли виноват в этом?, Но пока...вот код (использовал ваши советы)
Буду благодарен за помощь


Это сообщение отредактировал(а) gochu - 1.12.2010, 16:14
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.1241 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.