javajspfilesystemssambajcifs

Java JCIFS how right to copy file from Samba to Windows local?


I'm trying to create a Java application which can copy files from a Unix Samba share to a Windows folder. In order to achieve that, I'm using the JCIFS library.

I have the following code:

SmbFile smbFromFile = new SmbFile("smb:////192.168.10.1//data", auth);
smbFromFile.copyTo(destinationFolder);

I'm modifying it to:

SmbFile smbFromFile = new SmbFile("smb:////192.168.10.1//data", auth);
SmbFile destinationFolder = new SmbFile("C:\\Temp\\IN\\");
smbFromFile.copyTo(destinationFolder);

But it gives me the following error:

Exception in thread "main" jcifs.smb.SmbAuthException: Logon failure: unknown user name or bad password.
    at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:546)
    at jcifs.smb.SmbTransport.send(SmbTransport.java:663)
    at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:390)
    at jcifs.smb.SmbSession.send(SmbSession.java:218)
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:176)
    at jcifs.smb.SmbFile.doConnect(SmbFile.java:911)
    at jcifs.smb.SmbFile.connect(SmbFile.java:957)
    at jcifs.smb.SmbFile.connect0(SmbFile.java:880)
    at jcifs.smb.SmbFile.copyTo(SmbFile.java:2303)
    at RU.Tasks.Task3_Load_MedioSCP_Tekelek_file_To_DB_Oracle_BMCDB.main(Task3.java:203)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

If I try to create a new file on the Samba share, it works as expected:

String user = "usersamba";
String pass ="1234";
String hostname = "192.168.10.1";
String sharedFolder = "data/new";
String path = "smb://"+hostname+"/"+sharedFolder+"/test.txt";
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",user, pass);
SmbFile smbFile = new SmbFile(path,auth);
SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile);
smbfos.write("testing....and writing to a file".getBytes());
System.out.println("completed ...nice !");

Please help to resolve this problem.


Solution

  • option resolve to the problem

    
        InputStream in = null;
                   OutputStream out = null;
                   try{
    
                       String SambaURL= "smb://usersamba:1234@192.168.1.110/data/1b.csv";
                       File destinationFolder = new File("C:\\Temp\\IN\\");
                       SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS_");
                       File child = new File (destinationFolder+ "/" + fmt.format(new Date()) +"1b.csv");
                       SmbFile dir = new SmbFile(SambaURL);
                       SmbFile fileToGet=new SmbFile(SambaURL);
                       fileToGet.connect();
    
                       in = new BufferedInputStream(new SmbFileInputStream(fileToGet));
                       out = new BufferedOutputStream(new FileOutputStream(child));
    
                       byte[] buffer = new byte[4096];
                       int len = 0; //Read length
                       while ((len = in.read(buffer, 0, buffer.length)) != -1) {
                                 out.write(buffer, 0, len);
                       }
                       out.flush(); //The refresh buffer output stream
                   }
                   catch (Exception e) {
                       String msg = "The error occurred: " + e.getLocalizedMessage();
                       System.out.println(msg);
                   }
                   finally {
                       try {
                           if(out != null) {
                               out.close();
                           }
                           if(in != null) {
                               in.close();
                           }
                       }
                       catch (Exception e) {}
                   }
    
    

    source here