package com.iman.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import jcifs.smb.SmbException;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import jcifs.smb.SmbFileOutputStream;
/**
* @description: 远程共享读写文件操作工具类
* @author: luomeng
* @createDate: 2009-12-26 上午10:47:25
*/
public class RemoteFileUtil {
public static final String REMOTE_HOST_IP = "192.168.*.*";
public static final String LOGIN_ACCOUNT = "administrator";
public static final String LOGIN_PASSWORD = "password";
public static final String SHARE_DOC_NAME = "shareDoc";
private String remoteHostIp; //远程主机IP
private String account; //登陆账户
private String password; //登陆密码
private String shareDocName; //共享文件夹名称
/**
* 默认构造函数
*/
public RemoteFileUtil(){
this.remoteHostIp = REMOTE_HOST_IP;
this.account = LOGIN_ACCOUNT;
this.password = LOGIN_PASSWORD;
this.shareDocName = SHARE_DOC_NAME;
}
/**
* 构造函数
* @param remoteHostIp 远程主机Ip
* @param account 登陆账户
* @param password 登陆密码
* @param sharePath 共享文件夹路径
*/
public RemoteFileUtil(String remoteHostIp, String account, String password,String shareDocName) {
this.remoteHostIp = remoteHostIp;
this.account = account;
this.password = password;
this.shareDocName = shareDocName;
}
/**
* 对远程共享文件进行读取所有行
* @param remoteFileName 文件名 说明:参数为共享目录下的相对路径
* 若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);
* 若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;
* @return 文件的所有行
*/
public List<String> readFile(String remoteFileName){
SmbFile smbFile = null;
BufferedReader reader = null;
List<String> resultLines = null;
//构建连接字符串,并取得文件连接
String conStr = null;
conStr = "smb://"+account+":"+password+"@"+remoteHostIp+"/"+shareDocName+"/"+remoteFileName;
try {
smbFile = new SmbFile(conStr);
} catch (MalformedURLException e) {
e.printStackTrace();
}
//创建reader
try {
reader = new BufferedReader(new InputStreamReader(new SmbFileInputStream(smbFile)));
} catch (SmbException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
}
//循环对文件进行读取
String line;
try {
line = reader.readLine();
if(line != null && line.length()>0){
resultLines = new ArrayList<String>();
}
while (line != null) {
resultLines.add(line);
line = reader.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
//返回
return resultLines;
}
/**
* 对远程共享文件进行写入
* @param is 本地文件的输入流
* @param remoteFileName 远程文件名 说明:参数为共享目录下的相对路径
* 若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);
* 若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;
* @return
*/
public boolean writeFile(InputStream is,String remoteFileName){
SmbFile smbFile = null;
OutputStream os = null;
byte[] buffer = new byte[1024*8];
//构建连接字符串,并取得文件连接
String conStr = null;
conStr = "smb://"+account+":"+password+"@"+remoteHostIp+"/"+shareDocName+"/"+remoteFileName;
try {
smbFile = new SmbFile(conStr);
} catch (MalformedURLException e) {
e.printStackTrace();
return false;
}
//获取远程文件输出流并写文件到远程共享文件夹
try {
os = new BufferedOutputStream(new SmbFileOutputStream(smbFile));
while((is.read(buffer))!=-1){
os.write(buffer);
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 对远程共享文件进行写入重载
* @param localFileName 要写入的本地文件全名
* @param remoteFileName 远程文件名 说明:参数为共享目录下的相对路径
* 若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);
* 若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;
* @return
*/
public boolean writeFile(String localFileFullName ,String remoteFileName){
try {
return writeFile(new FileInputStream(new File(localFileFullName)),remoteFileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
}
/**
* 对远程共享文件进行写入重载
* @param localFileName 要写入的本地文件
* @param remoteFileName 远程文件名 说明:参数为共享目录下的相对路径
* 若远程文件的路径为:shareDoc\test.txt,则参数为test.txt(其中shareDoc为共享目录名称);
* 若远程文件的路径为:shareDoc\doc\text.txt,则参数为doc\text.txt;
* @return
*/
public boolean writeFile(File localFile ,String remoteFileName){
try {
return writeFile(new FileInputStream(localFile),remoteFileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
}
public static void main(String[] args){
RemoteFileUtil util = new RemoteFileUtil();
// List<String> lines = util.readFile("test.txt");
// for (String string : lines) {
// System.out.println(string);
// }
util.writeFile(new File("f:/a.csv"), "new.csv");
}
}
目前所在的项目,大量的用到了文件的上传。随着项目的扩大,用到了集群,这时候问题就出现了,用户上传到A上的文件下次用的时候服务可能在B上,这时文件就找不到了,所以我们的解决方案就是利用文件共享方式,把所有的文件放到了文件一个服务器上的共享文件夹中,作为文件服务器。所有的服务器写文件的时候都写到文件服务器中,这样就把问价给解决了。
当然,现在这个工具类中还有加下载文件的方法,其实直接把远程文件读到文件流中,下载的时候用文件就可以了,具体方式可以参照readLines方法
分享到:
相关推荐
可实现远程共享文件的文件生成,远程共享文件读写操作
远程文件操作通常比本地操作慢,因此在设计远程共享文件系统时,需要考虑性能优化,如批量读写、缓存策略、预加载等技术。易语言开发者需要理解这些概念,并根据具体应用场景选择合适的方法。 综上所述,易语言...
Java提供了一些库来实现这一功能,其中之一就是jcifs库,它是一个开源的Java SMB(Server Message Block)客户端,使得Java程序能够方便地操作Windows网络共享文件。在本文中,我们将深入探讨如何使用jcifs库中的...
在IT行业中,远程管理和共享目录的文件操作是一个重要的议题,特别是在网络编程和系统管理中。ASP.NET是一个由微软开发的强大的Web应用程序框架,它允许开发者创建动态、交互式的Web服务和网页应用。在这个场景中,...
在压缩包文件中,我们看到一个名为“远程共享usb设备教学软件”的文件,这很可能是包含了上述所有功能的软件安装包。用户下载后,不仅可以获得软件本身,还能找到注册码,这意味着软件可能需要激活才能使用。同时,...
3. **使用“打开网络共享文件”命令**:在适当的地方(如按钮点击事件)调用“打开网络共享文件”命令,传入刚刚定义的共享文件夹路径。这会启动默认的文件浏览器,显示指定的共享文件夹内容。 4. **处理可能的错误...
1. **Java文件I/O操作**:Java提供了丰富的API来处理文件读写和目录操作。核心类如`java.io.File`用于表示文件和目录路径,`java.io.FileInputStream`和`java.io.FileOutputStream`用于读写文件,`java.nio`包则提供...
远程存取服务系统旨在解决在分布式环境中对PB文件进行共享、同步和协作的问题。 首先,我们需要理解PB文件的本质。PB全称为Progress Binary,是由Progress Software公司开发的一种二进制文件格式,用于存储和传输...
在Java编程环境中,有时我们需要与Windows操作系统进行交互,例如访问共享目录并下载其中的文件。这个过程涉及到几个关键的技术点,包括系统调用、网络通信和文件操作。在这个场景下,我们将通过`SmbUtils.java`和`...
然后,打开本地和远程的文件流,并通过循环读写操作将远程文件的内容复制到本地文件。最后,记得关闭所有打开的流以释放资源。 注意,为了使用jcifs库,你需要在你的项目中添加jcifs-1.3.14.jar作为依赖,这可以...
jcifs库提供了SmbFile类,它类似Java的File类,可以用来创建、删除、重命名和读写共享文件。下面是一些关键知识点: 1. **jcifs库的引入**:首先,项目中需要添加jcifs库的依赖。如果是Maven项目,可以通过在pom....
在Android平台上,SMB(Server Message Block)协议是一种常见的用于访问网络上共享文件的方法,尤其适合于局域网环境。SMB协议允许设备通过网络共享文件、打印机以及其他资源,广泛应用于Windows、Linux和Unix系统...
本篇文章将详细阐述如何通过NFS在Linux服务器之间共享文件。 首先,启用NFS服务是共享文件的前提。在Linux系统中,你需要启动portmap服务,它是NFS服务依赖的服务,用于映射远程系统调用。然后启动NFS服务本身。你...
它允许用户通过TCP/IP连接访问远程计算机上的文件系统,并进行读写操作。 2. **FileZilla介绍**: - **安装与界面**:FileZilla提供了一个直观的界面,分为两部分:本地站点(Local Site)和远程站点(Remote Site...
通过SmbFile对象,我们可以对远程共享文件进行创建、读取、写入和删除等操作。 要实现文件上传,我们需要以下步骤: 1. **创建SmbFile对象**:指定远程共享文件的URL,格式通常为`smb://服务器名/共享路径/文件名`...
这种方式在分布式系统中非常常见,可以用于数据共享、文件服务等应用。 RMI的基本原理是将对象的方法调用转换为网络通信。首先,客户端通过RMI Registry找到远程服务的引用,然后调用这个引用上的方法,实际的计算...
7. **异步操作**:jcifs库支持异步文件操作,可以在后台线程执行文件读写,避免阻塞主线程,提高应用程序的响应速度。 8. **故障恢复**:jcifs具有一定的错误处理和重试机制,能够处理网络中断、服务器无响应等常见...
总之,Java通过JCIFS库可以方便地实现对Windows共享文件夹的读写操作。这个库使得Java程序员能够在各种操作系统环境中,轻松处理跨平台的文件共享需求。然而,使用过程中需要注意的是,由于涉及到网络通信和权限验证...
本文实例分析了Go语言共享内存读写的方法。分享给大家供大家参考。...共享内存用到的是系统提供的mmap函数,它可以将一个文件映射到虚拟内存的一个区域中,程序使用指针引用这个区域,对这个内存区域的操作
至于远程共享目录的读写操作,可以使用`FileStream`类。例如,打开一个共享文件进行写入: ```csharp FileStream fileStream = new FileStream(sharePath + "\\file.txt", FileMode.OpenOrCreate, FileAccess.Write...