Как прочитать файл из общего расположения Windows? (Джава) - PullRequest
6 голосов
/ 20 сентября 2011

Есть ли способ прочитать файл из общего сетевого расположения на windows?

Скажем, например, у меня есть этот простой код, который читает текстовый файл с именем readMe.txt из папки Addons ,

import java.io.File;

class Sample{

    public static void main(String[] ar){
        File file = new File("Addons/ReadMe.txt");
        System.out.println(file.getAbsolutePath());
      //followed by printing the contents of file   
    }
}

И я запускаю этот файл, используя пакет Windows runme.bat , который имеет

java Sample
PAUSE

Летучая мышь запускается и выполняет вышеуказанный класс, только когда я помещаю папку Addons с файлом ReadMe.txt, Sample.class, runme.bat на мой локальный диск.

Когда он размещен в общем сетевом расположении с UNC-путем, например \\ name \ Shared

В таком случае файл bat обычно запускает базу с C: \ Windows и выдает исключение classNotFoundException. Я скорее могу сопоставить общий диск на диск * Z: * или что-то еще, но я не хочу этого делать.

Я хочу, чтобы код программно обнаруживал и извлекал содержимое файла Readme.txt в папке Addons независимо от того, выполняется ли он на локальном диске или на общем диске. Есть ли способ добиться этого? Пожалуйста, помогите ..

Спасибо

Veekay

Ответы [ 3 ]

6 голосов
/ 20 сентября 2011

При использовании пути к файлу в Java, убедитесь, что правильно указали все \, указав полный путь.

Например, если файл находится на ПК с IP (10.10.10.123) в общей папке с именем Addons, тогда полный путь будет:

File f = new File ("\\\\10.10.10.123\\Addons\\readme.txt");

Кроме полного пути, ваш код выдает ClassNotFound, потому что у вас JAVA-CLASSPATH установлен неправильно.

1 голос
/ 28 сентября 2011

Два способа сделать.

1) Сопоставить общий путь с локальным диском.

2) Иначе жестко закодировать путь к серверу в новом файле (''), как упомянуто Medopal..

Что-то вроде new File("").getAbsolutePath() может помочь мне получить базовую папку при выполнении в локальной системе.Аналогично, нет такого способа программно определить рабочую базу, когда она выполняется в общей папке.

1 голос
/ 20 сентября 2011

В вашем файле bat %~dp0 расширяется до местоположения файла bat. Это нужно в вашем classpath, чтобы java мог найти этот класс, хотя я не знаю, будет ли он задушить путь UNC. Например:

@echo off
echo %~dp0

будет выводить

\\host\share\dir

РЕДАКТИРОВАТЬ:% dp0 не будет работать, если есть пробелы. Это то, что вам нужно в вашем файле bat:

@echo off
set p=%~dps0
echo %p%
java -classpath %p%\jarname classname
pause
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...