2016-03-25 3 views
0

OS: macbookчитать удаленный файл в Java

Я хочу прочитать удаленный файл на Java. Сначала я тестирую его на своем локальном компьютере.

  1. Я пытался использовать File, но вы, ребята сказали мне File могут быть использованы только на локальной файловой системе, спасибо.

    public static void main(String[] args) throws URISyntaxException { 
        URI uri = new URI("file://127.0.0.1/Users/jian/Public/logfiles/Hadoop/hdp_log1.log"); 
        File file = new File(uri); 
        System.out.println(file.exists()); 
    } 
    
  2. я найти библиотеку для Macbook, Samba JCIFS, по этой ссылке access to file using Java with Samba JCIFS. Вот мой код:

    public static void main(String[] args) throws URISyntaxException, MalformedURLException, SmbException { 
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("","jian", "ywnk"); 
        SmbFile smbFile = new SmbFile("smb://127.0.0.1/Users/jian/Public/logfiles/Hadoop/hdp_log1.log",auth); 
        System.out.println(smbFile.exists()); 
    } 
    

Тогда я получил эту ошибку:
Исключение в потоке «основного» jcifs.smb.SmbAuthException: Ошибка входа в систему: неизвестное имя пользователя или пароль.
имя пользователя совпадает с тем, что я запустил who am i в терминале, а пароль - мой пароль для входа. Я не знаю, почему я ошибаюсь в ошибке имени пользователя или пароля.
Спасибо, что помогли вашим парням.

+0

Помогает ли это: http://stackoverflow.com/questions/11724576/read-remote-file-in-java-which-needs-username-and-password? Чтобы сделать файл с файлом, кажется, вам нужно скопировать его на локальный диск. – Crine

+0

Взгляните на [эту ссылку] (http://www.rfc-base.org/txt/rfc-3986.txt).Он содержит информацию о компоненте полномочий uri. В основном, 'hostname: port' формирует компонент полномочий. – nickspol

+0

Я не уверен, что компонент полномочий означает точно, но похоже, что это может быть проблема разрешения. –

ответ

0

File не может использоваться для чтения «удаленных файлов». Он предназначен для использования для объектов файловой системы, которые только локальны для машины, а точнее, доступны из локальной файловой системы.

Так получилось, что в системах Unix у вас могут быть точки монтирования для удаленных файловых систем, например монтирования NFS или монтирования FUSE. Но они всегда будут рассматриваться как «местные».

Если вы хотите получить доступ к удаленному ресурсу, который будет рассматриваться как «файл», то File не может этого сделать.

Но JSR 203 может. См., Например, here.

Таким образом, сначала вам нужно определить, что вы подразумеваете под «удаленным файлом». Это полностью зависит от используемого вами протокола. И File не могут этого сделать. Если ОС не отсортировала его для вас (то есть, как упоминалось выше, у вас есть монтирование NFS, mount FUSE или другое).


Как к вашей ошибке, File конструктор предупреждает Вас, что есть компонент власти в ваших URI; и есть: 127.0.0.1. Поскольку File не ожидает ничего, кроме компонента пути к URI (в дополнение к схеме URI, file), это объясняет ошибку.

+0

спасибо. удаленный файл, я имею в виду, NFS. могу ли я сделать это с помощью «Пути»? – Jian

+0

Вы могли бы, если бы была реализация JSR203 для него ... Насколько я знаю, нет никого. Поэтому ваш лучший курорт здесь - установить его на уровне ОС и работать с ним. Обратите внимание, что вы можете просмотреть «точки монтирования» в Java, запросив различные доступные файлы FileStore: если ваш сервер NFS установлен, вы можете увидеть его как филе. См. 'FileSystems.getDefault(). GetFileStores()'. – fge

+0

спасибо. Мне нужно время, чтобы переварить ваш ответ. – Jian

0

Ваше требование может быть легко выполнено некоторой библиотекой FTP java.

Взгляните на ftp4j, его хорошую библиотеку для загрузки и скачивания файлов, а также для каталогов.

Apache commons-net также является хорошим вариантом. У них есть действительно хороший образец programs.