【问题标题】:How to read a file from remote system using java?如何使用java从远程系统读取文件?
【发布时间】:2010-01-06 06:18:44
【问题描述】:

我在一台计算机上复制了一个文件,我需要从另一台计算机访问该文件。 我不确定,为此使用哪种协议或技术? 请为此提供任何提示..

更新:

我使用的是 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 文件夹。

【问题讨论】:

    标签: java network-programming


    【解决方案1】:

    如果远程计算机在同一个网络中,并且位于运行您的 java 代码的计算机的共享文件夹中,请尝试使用这段代码访问它

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

    这里的 Comp-1 是网络中包含该文件的机器的 DNS 名称!!!

    【讨论】:

    • 您也可以使用 ip 代替 DNS 名称,即将 Comp-1 替换为 192.168.1.157
    【解决方案2】:

    将您的 IP 映射到网络驱动器并尝试让我们说驱动器号是 X,

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

    事实上您的文件已经加载到对象 f 中,尝试将路径 f.getAbsolutePath() 的值打印到控制台并查看。实际错误是 ImageIO

    【讨论】:

    • 这没有意义。 File 只是任何文件操作的包装器,exists() api 可以告诉你文件是否存在。
    【解决方案3】:

    您可以尝试先挂载该路径,然后再加载它。做一个:

    subst x: \\192.168.1.157
    

    然后:

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

    它应该可以工作。

    【讨论】:

      【解决方案4】:

      访问远程计算机上的文件的方法有很多种,但它们实际上都依赖于已设置为首先以某种方式提供文件的远程计算机。如果您要通过 java 访问文件,最简单的方法可能是在远程机器上设置一个 HTTP 服务器(这可以很容易地在各种平台上使用 Apache HTTP 服务器完成),然后使用 Apache Commons HTTPClient 在客户端 java 应用程序。关于如何安装或配置它们的进一步讨论通常超出了 Stack Overflow 的范围,至少需要一个更具体的问题

      【讨论】:

        【解决方案5】:

        你可以试试:

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

        【讨论】:

        • 没错。只有正确答案。 "file://192.168.1.157/home/renjith/picture.jpg" 是 URL,而不是文件名。
        【解决方案6】:

        HTTP 是一个选项。但是,如果这些是同一 LAN 上的 Windows 计算机,则通过文件共享公开远程计算机上的目录并通过常规文件路径访问文件会更容易。同样,如果这些是类 Unix 机器,如果您使用 NFS,则可以使用常规文件路径。 FTP 是另一种选择。

        【讨论】:

          【解决方案7】:

          共享目录并通过java代码访问文件 试试这个:

          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; 
          

          【讨论】:

          • 大家好,我使用的是 Ubuntu Linux 系统。我用的代码: File f = new File("//192.168.1.157/home/renjith/picture.jpg");// 192.168.1.157是电脑的ip,我有图片文件Image image = ImageIO .read(f);但它给出了一个异常:javax.imageio.IIOException:无法读取输入文件!在 javax.imageio.ImageIO.read(ImageIO.java:1275) 我也共享了 renjith 文件夹。任何帮助都是可观的。提前致谢..
          【解决方案8】:

          您可以使用 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();
                  }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-13
            • 1970-01-01
            • 2015-06-24
            • 1970-01-01
            相关资源
            最近更新 更多