简体   繁体   English

如何使用java从远程系统读取文件?

[英]How to read a file from remote system using java?

I have a file copied in one computer and I need to access the file from other computer. 我有一个文件复制到一台计算机,我需要从其他计算机访问该文件。 I am not sure, which protocol or which technology to use for this? 我不确定,使用哪种协议或哪种技术? Please provide me any hints for this.. 请给我任何提示......

Update: 更新:

I am using Ubuntu Linux system. 我正在使用Ubuntu Linux系统。 I used the code : 我用过代码:

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);

But it is giving an exception: 但它给出了一个例外:

javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(ImageIO.java:1275)

I have shared renjith folder also. 我也共享了renjith文件夹。

There are any number of ways to access files on remote machines, but they virtually all depend on the remote machine having been set up to provide the file in some way first. 有许多方法可以访问远程计算机上的文件,但它们几乎都依赖于已经设置的远程计算机以先以某种方式提供文件。 If you with to access files via java, the easiest method would probably be to set up an HTTP server on the remote machine (this can be done pretty easily using Apache HTTP server on a variety of platforms) and then using Apache Commons HTTPClient on the client side java app. 如果您要通过java访问文件,最简单的方法可能是在远程计算机上设置HTTP服务器(这可以在各种平台上使用Apache HTTP服务器轻松完成),然后使用Apache Commons HTTPClient客户端Java应用程序。 Further discussion of how to install these or configure them is generally beyond the scope of Stack Overflow and would at least require a more specific question 有关如何安装或配置它们的进一步讨论通常超出了Stack Overflow的范围,并且至少需要更具体的问题

HTTP is an option. HTTP是一种选择。 However, if these are Windows machines on the same LAN, it would be easier to expose the directory on the remote machine via a file share and access the file through a regular file path. 但是,如果这些是同一LAN上的Windows计算机,则通过文件共享公开远程计算机上的目录并通过常规文件路径访问该文件会更容易。 Similarly, if these are Unix-like machines, you could use regular file paths if you're using NFS. 同样,如果这些是类Unix机器,如果您使用NFS,则可以使用常规文件路径。 FTP's yet another option. FTP是另一种选择。

if the remote computer is in the same network and on a shared folder to the computer where your java code is running then try this piece of code for accessing it 如果远程计算机位于同一网络中,并且位于运行Java代码的计算机的共享文件夹中,请尝试使用此代码访问它

File file = new File("\\\\Comp-1\\FileIO\\Stop.txt");

here Comp-1 is the DNS name of the machine containing the file in the network!!! 这里Comp-1是包含网络文件的机器的DNS名称!

You might try: 你可以试试:

URL url = new URL("file://192.168.1.157/home/renjith/picture.jpg");
Image image = ImageIO.read(url); 

You could try to mount that path first, and then load it. 您可以先尝试安装该路径,然后加载它。 Do a : 做一个:

subst x: \\192.168.1.157

and then: 然后:

File f = new File("x:\\home\\renjith\\picture.jpg");
Image image = ImageIO.read(f)

It should work. 它应该工作。

Share the directory and access the file thruogh java code try this one: 共享目录并访问文件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; 

You can read from remote and write to remote using jcifs-1.3.15.jar jar in java but first you need to share location from remote system then it's possible. 您可以使用java中的jcifs-1.3.15.jar jar从远程读取并写入远程,但首先您需要从远程系统共享位置然后才可能。

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();
        }

Map your IP to network drive and try let us say the drive letter is X, 将您的IP映射到网络驱动器,然后让我们说驱动器号是X,

then code changes to File f = new File("x:\\\\home\\\\renjith\\\\picture.jpg"); 然后代码更改为File f = new File("x:\\\\home\\\\renjith\\\\picture.jpg");

Infact your file is already loaded in object f , try priting the value of the path f.getAbsolutePath() to console and see.. Actual error is with ImageIO 实际上你的文件已经加载到对象f ,尝试将路径f.getAbsolutePath()的值f.getAbsolutePath()到控制台并查看..实际错误与ImageIO

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM