Как читать файл из удаленной системы с помощью java?
У меня есть файл, скопированный на одном компьютере, и мне нужно получить доступ к файлу с другого компьютера.
Я не уверен, какой протокол или какую технологию использовать для этого?
Пожалуйста, предоставьте мне какие-либо намеки на это.
Обновление:
Я использую систему Ubuntu Linux.
Я использовал код:
File f = new File("//192.168.1.157/home/renjith/picture.jpg");// 192.168.1.157 is the ip of the computer, where I have the picture file
Image image = ImageIO.read(f);
Но это дает исключение:
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1275)
У меня также есть папка renjith.
Ответы
Ответ 1
Существует множество способов доступа к файлам на удаленных компьютерах, но они практически все зависят от удаленного компьютера, который был настроен для предоставления файла в некотором роде. Если вы хотите получить доступ к файлам через java, самым простым способом, вероятно, будет настройка HTTP-сервера на удаленном компьютере (это можно сделать довольно легко, используя HTTP-сервер Apache на разных платформах), а затем используя HTTPClient Apache Commons на клиентская java-приложение. Дальнейшее обсуждение того, как их установить или настроить, как правило, выходит за рамки и, по крайней мере, потребует более конкретного вопроса
Ответ 2
HTTP - это опция. Однако, если это компьютеры Windows в одной и той же локальной сети, было бы проще разоблачить каталог на удаленной машине через общий ресурс файла и получить доступ к файлу через обычный путь к файлу. Аналогично, если это Unix-подобные машины, вы можете использовать обычные пути к файлам, если используете NFS. FTP еще один вариант.
Ответ 3
если удаленный компьютер находится в той же сети и в общей папке на компьютере, на котором запущен ваш Java-код, попробуйте этот фрагмент кода для доступа к нему
File file = new File("\\\\Comp-1\\FileIO\\Stop.txt");
здесь Comp-1 - это DNS-имя машины, содержащей файл в сети.
Ответ 4
Вы можете попробовать:
URL url = new URL("file://192.168.1.157/home/renjith/picture.jpg");
Image image = ImageIO.read(url);
Ответ 5
Вы можете попытаться сначала установить этот путь, а затем загрузить его. Сделайте a:
subst x: \\192.168.1.157
а затем:
File f = new File("x:\\home\\renjith\\picture.jpg");
Image image = ImageIO.read(f)
Он должен работать.
Ответ 6
Поделитесь каталогом и получите доступ к файлу thruogh java code
попробуйте следующее:
File f = new File("//10.22.33.122/images")
File[] files = f.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
// Specify the extentions of files to be included.
return name.endsWith(".bmp") || name.endsWith(".gif");
}
});
// get names of the files
String[] fileNamesArray = null;
for (int indx = 0; indx < files.length(); indx++) {
fileNamesArray[indx] = files[indx].getName();
}
return fileNamesArray;
Ответ 7
С помощью jcifs-1.3.15.jar jar в java вы можете читать с удаленного компьютера и писать на удаленный, но сначала вам нужно разделить местоположение с удаленной системой, тогда это возможно.
try{
String strLine="";
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("WORKGROUP", "username", "passwd"); // Authentication info here, domain can be null
// try (InputStream is = new SmbFile("smb://DESKTOP-0xxxx/usr/local/cache/abc.txt", auth).getInputStream()) {
try (InputStream is = new SmbFile("smb://xx.xx.xx.xxx/dina_share/abc.txt", auth).getInputStream()) {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while ((strLine = br.readLine()) != null) {
System.out.println(strLine);
}
} catch (IOException e) {
e.printStackTrace();
}
String smbURL="smb://xx.xx.xx.xxx/dina_share/abcOther.txt";
SmbFileOutputStream fos = new SmbFileOutputStream(new SmbFile(smbURL,auth));
byte bytes[]="Wellcome to you".getBytes();
fos.write(bytes);
}catch(Exception e){
e.printStackTrace();
}
Ответ 8
Сопоставьте свой IP-адрес с сетевым диском и попробуйте сказать, что буква диска X,
тогда код изменяется на File f = new File("x:\\home\\renjith\\picture.jpg");
Infact ваш файл уже загружен в объект f
, попробуйте передать значение пути f.getAbsolutePath()
на консоль и посмотрите.. Фактическая ошибка с ImageIO