Question

I am trying to create an SmbFileInputStream leading to a directory that does exist on my system. I am using the following code. Every time, I receive an error in the third try-catch that reveals to me the stacktrace below. I believe the error is in the formatting of the SMB URL. If anyone could help point out where I may have erred in the configuration of my domain, server, and user info, or how to escape the special characters below, I would be extremely grateful.

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import jcifs.smb.*;
import jcifs.*;

public class jcifsX {

    public static void main (String[] args){
        System.err.println("*********************************************************** loadWorkbookOrFail was ran");
        // create a new file input stream with the input file specified by fileName

        jcifs.Config.registerSmbURLHandler();


        NtlmPasswordAuthentication npa = null;
        try{
            npa = new NtlmPasswordAuthentication("myDomain","myUser","myPass");
            System.err.println("*********************************************************** NtlmPasswordAuthentication created successfully");
        } catch (Exception e) {
            System.err.println("*********************************************************** Failed to create NtlmPasswordAuthentication. Stack trace to follow");
            e.printStackTrace();
        }


        SmbFile smbf = null;
        try{
            smbf = new SmbFile("smb:" + "//myDomain;myUser:myPass@myServer/myShare/" + args, npa);
            System.err.println("*********************************************************** SmbFile successfully created");
            }
        catch (Exception e) {
            System.err.println("*********************************************************** Stack trace to follow");
            e.printStackTrace();
        }


        SmbFileInputStream sfin = null;
        try{
            sfin = new SmbFileInputStream(smbf);
            System.err.println("*********************************************************** SmbFileInputStream successfully initiated");
            throw new IllegalArgumentException("If you're seeing this, it looks like it worked");
            }
        catch (Exception e){
            System.err.println("*********************************************************** SmbFileInputStream failed: Stack trace to follow. args = " + args);
            e.printStackTrace();
        }
    }
}

The stacktrace I receive upon running this looks like

jcifs.smb.SmbException: The system cannot find the file specified.
    at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)
    at jcifs.smb.SmbTransport.send(SmbTransport.java:663)
    at jcifs.smb.SmbSession.send(SmbSession.java:238)
    at jcifs.smb.SmbTree.send(SmbTree.java:119)
    at jcifs.smb.SmbFile.send(SmbFile.java:775)
    at jcifs.smb.SmbFile.open0(SmbFile.java:989)
    at jcifs.smb.SmbFile.open(SmbFile.java:1006)
    at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:73)
    at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:65)
    at jcifsX.main(jcifsX.java:61)

Thank you in advance to anyone willing to spend any time devoted to this problem. It is greatly appreciated.

No correct solution

OTHER TIPS

You used "smb:" + "//myDomain;myUser:myPass@myServer/myShare/" + args. This will produce string like this smb://myDomain;myUser:myPass@myServer/myShare/[Ljava.lang.String;@470ae2bf.

So use like this "smb:" + "//myDomain;myUser:myPass@myServer/myShare/" + args[0]. Instead of 0 use the proper index.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top