import java.io.File;
import java.io.IOException;
import com.sun.nfs.XFileExtensionAccessor;
import com.sun.xfile.XFile;
import com.sun.xfile.XFileInputStream;
import com.sun.xfile.XFileOutputStream;
public class Snippet {
public void downloadViaNFS(final String ip, final String user,
final String password, final String dir) {
System.out.println("NFS download begin!");
try {
String url = "nfs://" + ip + "/" + dir;
System.out.println(url);
XFile xf = new XFile(url);
if (xf.exists()) {
System.out.println("URL is OK!");
} else {
System.out.println("URL is Bad!");
return;
}
XFileExtensionAccessor nfsx = (XFileExtensionAccessor) xf
.getExtensionAccessor();
if (!nfsx.loginPCNFSD(ip, user, password)) {
System.out.println("login failed!");
return;
}
String[] fileList = xf.list();
XFile temp = null;
long startTime = System.currentTimeMillis();
int filesz = 0;
for (String file : fileList) {
temp = new XFile(url + "/" + file);
XFileInputStream in = new XFileInputStream(temp);
XFileOutputStream out = new XFileOutputStream("E:\\test"
+ File.separator + file);
int c;
byte[] buf = new byte[8196];
while ((c = in.read(buf)) > 0) {
filesz += c;
out.write(buf, 0, c);
}
System.out.println("File is downloaded!");
in.close();
out.close();
/*
* if (temp.canWrite()) { temp.delete(); } else { }
*/
}
long endTime = System.currentTimeMillis();
long timeDiff = endTime - startTime;
int rate = (int) ((filesz / 1000) / (timeDiff / 1000.0));
System.out.println("rate =" + rate);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String ip = "192.168.1.175";
String user = "root";
String password = "root3306";
String dir = "tmp/sheldon";
Snippet s = new Snippet();
s.downloadViaNFS(ip, user, password, dir);
}
}
smb服务器的操作
package NFS;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;
public class RemoteAccessDataSMB {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
smbGet1("smb://192.168.75.204/test/新建 文本文档.txt");
smbGet("smb://192.168.75.204/test/新建 文本文档.txt","e:/");
}
/**
* 方法一:
*
* @param remoteUrl
* 远程路径 smb://192.168.75.204/test/新建 文本文档.txt
* @throws IOException
*/
public static void smbGet1(String remoteUrl) throws IOException {
SmbFile smbFile = new SmbFile(remoteUrl);
int length = smbFile.getContentLength();// 得到文件的大小
byte buffer[] = new byte[length];
SmbFileInputStream in = new SmbFileInputStream(smbFile);
// 建立smb文件输入流
while ((in.read(buffer)) != -1) {
System.out.write(buffer);
System.out.println(buffer.length);
}
in.close();
}
// 从共享目录下载文件
/**
* 方法二:
* 路径格式:smb://192.168.75.204/test/新建 文本文档.txt
* smb://username:password@192.168.0.77/test
* @param remoteUrl
* 远程路径
* @param localDir
* 要写入的本地路径
*/
public static void smbGet(String remoteUrl, String localDir) {
InputStream in = null;
OutputStream out = null;
try {
SmbFile remoteFile = new SmbFile(remoteUrl);
if (remoteFile == null) {
System.out.println("共享文件不存在");
return;
}
String fileName = remoteFile.getName();
File localFile = new File(localDir + File.separator + fileName);
in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
out = new BufferedOutputStream(new FileOutputStream(localFile));
byte[] buffer = new byte[1024];
while (in.read(buffer) != -1) {
out.write(buffer);
buffer = new byte[1024];
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 向共享目录上传文件
public static void smbPut(String remoteUrl, String localFilePath) {
InputStream in = null;
OutputStream out = null;
try {
File localFile = new File(localFilePath);
String fileName = localFile.getName();
SmbFile remoteFile = new SmbFile(remoteUrl + "/" + fileName);
in = new BufferedInputStream(new FileInputStream(localFile));
out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
byte[] buffer = new byte[1024];
while (in.read(buffer) != -1) {
out.write(buffer);
buffer = new byte[1024];
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 远程url smb://192.168.0.77/test
// 如果需要用户名密码就这样:
// smb://username:password@192.168.0.77/test
}