Axiu Blog
le.txt这种格式即可实现共享,但是跨到linux这边就要用smb://ip/sharefolder/file.txt这种,即使用smb协议。到java程序中,就要用迂回的办法来实现了,那就是jcifs。 Jcifs是CIFS在JAVA中的一个实现,是samba组织本着linux的精神,负责维护开发的一个开源项目。这个项目专注于使用java语言对cifs
CIFS(Common Internet File System)全称是通用Internet文件系统,由于在windows主机之间进行网络文件共享是通过使用微软公司自己的CIFS服务实现的,所以直接通过//ip/sharefolder/file.txt这种格式即可实现共享,但是跨到linux这边就要用smb://ip/sharefolder/file.txt这种,即使用smb协议。到java程序中
CIFS(Common Internet File System)全称是通用Internet文件系统,由于在windows主机之间进行网络文件共享是通过使用微软公司自己的CIFS服务实现的,所以直接通过//ip/sharefolder/file.txt这种格式即可实现共享,但是跨到linux这边就要用smb://ip/sharefolder/file.txt这种,即使用smb协议。到java程序中
java使用jcifs从ubuntu向win服务器上传下载文件
Max

CIFS(Common Internet File System)全称是通用Internet文件系统,由于在windows主机之间进行网络文件共享是通过使用微软公司自己的CIFS服务实现的,所以直接通过//ip/sharefolder/file.txt这种格式即可实现共享,但是跨到linux这边就要用smb://ip/sharefolder/file.txt这种,即使用smb协议。到java程序中,就要用迂回的办法来实现了,那就是jcifs。

Jcifs是CIFS在JAVA中的一个实现,是samba组织本着linux的精神,负责维护开发的一个开源项目。这个项目专注于使用java语言对cifs协议的设计和实现。他们将jcifs设计成为一个完整的,丰富的,具有可扩展能力且线程安全的客户端库。这一库可以应用于各种java虚拟机访问遵循CIFS/SMB网络传输协议的网络资源。类似于java.io.File的接口形式,在多线程的工作方式下被证实是有效而轻易使用的。

1.usage

进入http://jcifs.samba.org/,在左边Links找到Download链接,点进去是个文件共享的目录,下载最新版(win用zip,linux用tgz)。

解压会看到一些example和docs说明文件,还有jcifs的jar包。复制下载到的jcifsxx.xx.jar到工程目录下,并在builder path中包含该jar包。和其他第三方库一样,在程序中调用jar包提供的各种接口。

2.auth

认证是程序中最容易遇到错误的部分,因为公司本地有域认证的关系,所以在认证方面费了一番功夫,并且碰到许多奇怪的问题。总结起来有3种错误:

1、本地文件或者路径不存在
path + (No such file or directory)
2、目标文件/路径不存在
access denied
The system cannot find the path specified.
3、用于验证的用户名密码不对
Logon failure: unknown user name or bad password.
The specified network password is not correct.

3.upload

接下来就是上传了.完整程序如下:

public static void main(String argv\[\]) throws Exception {
	String local = "/home/Desktop/yourlocalFile.name";
	String remote = "smb://yoursharefolder/SMBtest.doc";
	copyTo(local, remote);
}

private static void copyTo(String localName, String remoteName) {
	OutputStream fileOutputStream = null;
	FileInputStream fileInputStream = null;
	NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",
			"username", "password");
	try {
		SmbFile remoteFile = new SmbFile(remoteName, auth);
		SmbFile remoteDir = new SmbFile(remoteFile.getParent(), auth);
		// create remote folder if not exist
		if (!remoteDir.exists())
			remoteDir.mkdirs();
		// create remote file
		if (!remoteFile.exists())
			remoteFile.createNewFile();
		remoteFile.setReadWrite();
		byte\[\] buf;
		int len;
		System.out.println("Now copying " + localName);
		try {
			fileInputStream = new FileInputStream(localName);
			fileOutputStream = remoteFile.getOutputStream();

			buf = new byte\[16 \* 1024 \* 1024\];
			while ((len = fileInputStream.read(buf)) > 0) {
				fileOutputStream.write(buf, 0, len);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			fileInputStream.close();
			fileOutputStream.close();
			System.out.println("Upload " + remoteName + ", done");
		}
	} catch (Exception e) {
		System.err.println("Exception occured: " + e.getMessage());
	}
}
Comments