2011-09-20 101 views
4

有没有办法读取从Windows上的网络共享位置的文件?如何从共享位置的Windows读取文件? (JAVA)

比方说,比如我有这个简单的代码读取称为的readme.txt附加组件文件夹中的文本文件。

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 

蝙蝠运行,并只有当我把自述的附加组件文件夹上面的类执行此文件。 txt,Sample.class,我的本地驱动器中的runme.bat文件。

当它被放置在一个网络共享位置与UNC路径等\\名\共用

在这样的情况下,bat文件通常开始从C中的碱:\ Windows下并抛出一个classNotFoundException。我可以相当映射共享驱动器到* Z:*驱动器或什么,但我并不想这样做。

我想要的代码以编程方式检测并且不管是否它是被一个本地驱动器或共享驱动器上执行的检索的Readme.txt的在扩展中心夹的内容。有没有办法做到这一点?请帮助..

感谢

Veekay

+0

您可能会在这里找到提示:http://stackoverflow.com/questions/1682194/java-read-file-from-network-device – Nishan

+0

据我所知。映射的驱动器是,但UNC路径号。 – Shahzeb

+1

此外,这:http://stackoverflow.com/questions/825731/how-best-to-add-unc-file-paths-to-a-java-classpath – Nishan

回答

1

两种做法。

1)将共享路径映射到本地驱动器。

2)如Medopal所述,否则在新文件('')中将服务器路径硬编码。

new File("").getAbsolutePath()这样的东西可能会帮助我在本地系统上执行基本文件夹。同样,当在共享位置上执行时,也没有这种方式以编程方式找出工作基地。

3

当使用Java中的文件路径,确保给全路径名时,正确地逃避所有\

例如,如果该文件是在PC上用IP (10.10.10.123)上的共享文件夹,名为Addons那么完整的路径将是:

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

除了完整路径,你的代码抛出ClassNotFound因为你JAVA-CLASSPATH设置不正确。

+0

谢谢,但我希望它能够在任何共享位置上运行,而无需必须对baseFolder进行硬编码。 –

1

在你的bat文件%~dp0扩展到bat文件的位置。你需要在你的类路径,以便Java可以找到类,但我不知道这是否会UNC路径上窒息。例如:

@echo off 
echo %~dp0 

将输出

\\host\share\dir 

编辑:如果有空格%DP0将无法正常工作。这是你的bat文件中需要的:

@echo off 
set p=%~dps0 
echo %p% 
java -classpath %p%\jarname classname 
pause