8

Javaでリモートファイルを読み込もうとしています

File f = new File("//192.168.1.120/home/hustler/file.txt");

リモートマシンには、ファイルにアクセスするためのユーザー名とパスワードが必要です。

Javaコードを介してパラメーターを渡し、ファイルを読み取る方法はありますか?

4

4 に答える 4

8
package com.eiq;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.Selectors;
import org.apache.commons.vfs.UserAuthenticator;
import org.apache.commons.vfs.VFS;
import org.apache.commons.vfs.auth.StaticUserAuthenticator;
import org.apache.commons.vfs.impl.DefaultFileSystemConfigBuilder;

public class RemoteFileDemo {
    public static void main(String[] args) throws IOException {

        String domain = "hyd\\all";
        String userName = "chiranjeevir";
        String password = "Acvsl@jun2013";
        String remoteFilePath = "\\\\10.0.15.74\\D$\\Suman\\host.txt";


        File f = new File("E:/Suman.txt"); //Takes the default path, else, you can specify the required path
        if (f.exists()) {
            f.delete();
        }
        f.createNewFile();
        FileObject destn = VFS.getManager().resolveFile(f.getAbsolutePath());

        //domain, username, password
        UserAuthenticator auth = new StaticUserAuthenticator(domain, userName, password);
        FileSystemOptions opts = new FileSystemOptions();
        DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);


        FileObject fo = VFS.getManager().resolveFile(remoteFilePath, opts);

        System.out.println(fo.exists());

        //fo.createFile();

        destn.copyFrom(fo, Selectors.SELECT_SELF);
        destn.close();

        //InputStream is = new FileInputStream(f);

    }
}

これは、リモートマシンからファイルを読み取り、それをファイルとしてローカルマシンに保存するプログラムですE:/Suman.txt

ファイルパスを書くときは注意してください。つまり、記号 :に置き換える必要はありません。たとえば、:が間違っている、 正しいです。$D:\Suman\Boorla\kpl.txtD$\\Suman\\Boorla\\kpl.txt

上記のプログラムでは、リモートマシンのドメイン名、ユーザー名、パスワード、ファイルパスを変更する必要があります。jar上記のプログラムを使用するには、クラスパスに次のファイルを追加する必要があります。

commons-vfs.jar
commons-logging.jar
于 2013-06-21T08:28:58.840 に答える
5

jCIFSのもう1つの方法は、認証パラメーターを簡単に指定できることです。

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("domain", "user", "password"); // Authentication info here, domain can be null
try (InputStream is = new SmbFile("smb://192.168.1.120/home/hustler/file.txt", auth).getInputStream()) {
    // Read from 'is' ...
} catch (IOException e) {
    // Handle IOException
}
于 2017-01-23T14:29:13.000 に答える
3

CommonsVSFを試すこともできます。UserAuthenticatorを確認してください

于 2012-07-30T15:47:45.713 に答える
3

これが私が書いたコードで、完璧に機能しています。

File f=new File("abc.txt"); //Takes the default path, else, you can specify the required path
if(f.exists())
{
    f.delete();
}
f.createNewFile(); 
FileObject destn = VFS.getManager().resolveFile(f.getAbsolutePath());
UserAuthenticator auth = new StaticUserAuthenticator("", "myusername", "secret_password");
FileSystemOptions opts = new FileSystemOptions();

DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);
FileObject fo = VFS.getManager().resolveFile("\\\\192.168.0.1\\direcory\\to\\GetData\\sourceFile.txt",opts);
destn.copyFrom(fo,Selectors.SELECT_SELF);
destn.close();

これで、ファイルを使用して必要な操作を実行できます。何かのようなもの...

InputStream is = new FileInputStream(f);
于 2012-07-31T16:42:50.887 に答える