- 浏览: 94892 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (209)
- http://docs.jpush.io/server/java_sdk/ (1)
- SpingMVC ModelAndView (1)
- Model (1)
- Control以及参数传递 (1)
- https://www.alipay.com/ (1)
- 检查指定的字符串列表是否不为空。 (1)
- 转自http://my.oschina.net/rpgmakervx/blog/505434 (1)
- 压缩js (1)
- 含包含 字母数字校验 (1)
- 判断浏览器是ie (1)
- fixbox (0)
- 转自http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html (1)
- http://dl2.iteye.com/upload/attachment/0113/2406/afbd8d53-dcad-3afc-8d78-41c1591 (0)
- IDEA (0)
- maven搭建 (0)
- http://www.jeasyuicn.com/api/docTtml/index.htm (1)
- 给tomcat添加运行内存: (1)
- JPUSH推送 (1)
- requestScope (0)
- oracle中plsql安装client10连接数据库 (1)
- 不需要安装oracle11g (1)
- tuikuan (1)
- http://www.hjxmall.com/index.php (1)
- java (1)
- 参考 (1)
- xml签名验签模拟程序 (1)
- 技术网站收集分享 (1)
- Java NIO提供了与标准IO不同的IO工作方式 ------来源于 http://www.iteye.com/magazines/132-Java-NIO (1)
- oracle表查询语句优化 (0)
- oracle (5)
- a (1)
- TenpayHttpClient (2)
- mongodb (1)
- http://www.qcloud.com/product/cmongo.html?utm_source=pcsem1&utm_medium=bdgj46&utm_campaign=baidu (1)
- SpringMVC整合MongoDB开发 (0)
- SpringMVC整合MongoDB开发 https://www.mongodb.org (1)
- Java 语言中常见问题总结 (1)
- 数据库SQL优化大总结 (1)
- 拦截器与过滤器的区别 (1)
- Struts2中拦截器与过滤器的区别及执行顺序 (1)
- Spring声明式事务管理与配置 (0)
- oracle OPERTION (1)
- java 高并发多线程开发 (1)
- Collection 与 map 接口相关集合 (1)
- 多线程开发实践 (1)
- JVM调优总结 转自 http://www.importnew.com/18694.html (1)
- redis 五种数据类型的使用场景 转自于 http://blog.csdn.net/gaogaoshan/article/details/41039581 (1)
- HttpWatch http基础 来自于http://blog.csdn.net/gaogaoshan/article/details/21237555 (1)
- maven 远程仓库 http://blog.csdn.net/gaogaoshan/article/details/40266779 (1)
- 生成Webservice客户端的4中方法 http://blog.csdn.net/gaogaoshan/article/details/8980775 (1)
- http://fgh2011.iteye.com/blog/1564283 (1)
- sleep和wait有什么区别 http://xiaowei2002.iteye.com/blog/2174188 (1)
- JDK中常用包及其类 常见的几种RuntimeException (1)
- Java的运行原理 (1)
- mybatis缓存的使用及理解 http://my.oschina.net/dxqr/blog/123163 (1)
- 软件架构设计分析 (1)
- redis技术总结 (3)
- java面试总结知识点 (1)
- ZooKeeper技术 (1)
- Hadoop (1)
- sso单点登录 (1)
- SpringIOC (1)
- 书签ssssssssssssssssssssss (1)
- spring事务的隔离级别 http://www.cnblogs.com/yangy608/archive/2011/06/29/2093478.html (1)
- 秒杀系统架构分析与实战 http://www.importnew.com/18920.html (1)
- oracle 连接plsql配置 (1)
- maven工程集成springmvc http://blog.csdn.net/fox_lht/article/details/16952683 (1)
- java类序列化与反序列化版本唯一号serialVersionUID (1)
- spring注解用法总结 (1)
- eclipse导入maven项目找不到资源文件方法 (1)
- dubbo (0)
- socket 网络编程 服务器与客户端 编程 (1)
- Thread与Runnable实现线程利用线程插队实现求和操作 (1)
- 生产者与消费者模式 (1)
- JAXB注解 java 关于xml的注解,自动生成xml文件 - @XML*** (1)
- xml 与JAVAbean转换 (1)
- MAP (2)
- decimalToString (1)
- 反编译插件 (0)
- 反编译插件 https://sourceforge.net/projects/jadclipse/?source=typ_redirect (1)
- AWX (1)
- 官网地址Dinp (1)
- public interface ExecutorService extends Executor (1)
- MAIN (1)
- 转自于 http://blog.csdn.net/lufeng20/article/details/24314381 (1)
- JaxbUtil (1)
- HttpXmlClient (0)
- Http post 请求 (1)
- URLDecoder (1)
- spdb (0)
- 订单号生成规则 (1)
- 距离0点毫秒数 (1)
- MyBatis存储过程调用java (1)
- Banks (1)
- 学习网址 (1)
- hots配置oracle数据库配置修改 (1)
- 支付宝文档 (1)
- Jadclipse (1)
- filter (0)
- Filter过滤器 (1)
- 工具类 fixbox (1)
- java quartz (0)
- java quartz 实现定时任务,每个礼拜一到礼拜五定时执行 (1)
- Thread (4)
- getResourceAsStream (1)
- BigData (1)
- 开源架构 (17)
- 架构 (0)
- 文件操作 (2)
- tools (20)
- 测试工具 (1)
- vm (1)
- mq (1)
- blog (1)
- 开源架构搭建技术 (6)
- JAVA细节技术点总结 (1)
- 优化技术 (1)
- LINUX命令使用 (1)
- spring (2)
- 大数据 (1)
- struts2 (1)
- python (1)
- pay (1)
- linux (1)
- 压力测试 (1)
- 代码检查插件 (1)
- 游戏端开发 (1)
- 微信开发相关 (1)
- 搜索引擎 (1)
- 网络技术 (1)
- 分布式部署 (1)
- 堆栈信息 (1)
最新评论
文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载
文件下载功能的实现思路:找到文件路径,取文件名,设置浏览器响应头,获取输入流,获取输出流,将输入流通过buffer转到输出流输出到浏览器
1.获取要下载的文件的绝对路径
2.获取要下载的文件名
3.设置content-disposition响应头控制浏览器以下载的形式打开文件
4.获取要下载的文件输入流FileInputStream
5.创建数据缓冲区buffer
6.通过response对象获取OutputStream流
7.将FileInputStream流写入到buffer缓冲区
8.使用OutputStream将缓冲区的数据输出到客户端浏览器
文件下载注意事项:编写文件下载功能时推荐使用OutputStream流,避免使用PrintWriter流,因为OutputStream流是字节流,可以处理任意类型的数据,而PrintWriter流是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失。
[java] view plain copy
package gacl.response.study;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author gacl
* 文件下载
*/
public class ResponseDemo02 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
downloadChineseFileByOutputStream(response);//下载中文文件
}
/**
* 下载中文文件,中文文件下载时,文件名要经过URL编码,否则会出现文件名乱码
* @param response
* @throws FileNotFoundException
* @throws IOException
*/
private void downloadChineseFileByOutputStream(HttpServletResponse response)
throws FileNotFoundException, IOException {
String realPath = this.getServletContext().getRealPath("/download/张家界国家森林公园.JPG");//获取要下载的文件的绝对路径
String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//获取要下载的文件名
//设置content-disposition响应头控制浏览器以下载的形式打开文件,中文文件名要使用URLEncoder.encode方法进行编码,否则会出现文件名乱码
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
InputStream in = new FileInputStream(realPath);//获取文件输入流
int len = 0;
byte[] buffer = new byte[1024];
OutputStream out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(buffer,0,len);//将缓冲区的数据输出到客户端浏览器
}
in.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
----------java实现ftp的文件上传和下载 --------------
import static org.junit.Assert.fail;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @version 创建时间:2015年12月14日 上午9:45:32
*
*/
public class JunitFtp {
private static FTPClient ftpClient;
private static String ftpIp = "192.168.0.229";
private static String ftpUser = "ff";
private static String ftpPassWord = "ff";
private static String ftpPort = "21";
private static String workingDirectory = "\\data";
private static String localDirectory = "E:\\home\\ftp\\download";
@BeforeClass
public static void setUpBeforeClass() throws Exception {
// ftp连接
ftpClient = new FTPClient();
ftpClient.setControlEncoding("gb2312");
ftpClient.connect(ftpIp, Integer.parseInt(ftpPort));
ftpClient.login(ftpUser, ftpPassWord);
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
ftpClient.disconnect();
}
/**
*单个文件下载
* @throws IOException
* "JiaYanFei"
* 2015年12月14日
*/
@Test
public void fileDownload() throws IOException {
// ftpClient.setControlEncoding("gb2312");
FileOutputStream fos = null;
try {
ftpClient.connect(ftpIp, Integer.parseInt(ftpPort));
ftpClient.login(ftpUser, ftpPassWord);
ftpClient.changeWorkingDirectory(workingDirectory);
System.out.println("dir:" + ftpClient.printWorkingDirectory());
FTPFile[] files = ftpClient.listFiles();
// FTP服务器文件路径
String remoteFileName = "\\data\\中.txt";// 已经切换到data目录只写 中.txt 也可以 但是 写\\中.txt不行
String newFileName = "文.txt";
// 文件下载存放路径
fos = new FileOutputStream(localDirectory + File.separator+ newFileName);
fos.flush();
ftpClient.setBufferSize(1024);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
if (ftpClient.retrieveFile(remoteFileName, fos)) {
System.out.println(" 文件下载成功。。");
} else {
System.out.println(" 文件下载失败。。");
fail("下载失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(fos);
ftpClient.disconnect();
}
}
@Test
public void fileUpload() throws IOException {
FileInputStream fis = null;
try {
ftpClient.connect(ftpIp, Integer.parseInt(ftpPort));
ftpClient.login(ftpUser, ftpPassWord);
ftpClient.changeWorkingDirectory("/data");
fis = new FileInputStream(new File("E:\\home\\ftp\\data\\o.txt"));
if (ftpClient.storeFile("/data/backFile3.txt", fis)) {// /backFile3.txt backFile3.txt也可以
System.out.println("上传成功!");
} else {
System.out.println("上传失败");
fail("上传失败");
}
} finally {
IOUtils.closeQuietly(fis);
ftpClient.disconnect();
}
}
/**
*目录下载
* @throws IOException
* 2015年12月14日
*/
@Test
public void downloadDirectory() throws IOException {
downloadDirectory("\\data" ,localDirectory+ "\\data");
}
/**
*目录递归下载
* @param basePath
* @param localPath
* @throws IOException
* 2015年12月14日
*/
public void downloadDirectory(String basePath, String localPath) throws IOException{
ftpClient.changeWorkingDirectory(basePath);
System.out.println(ftpClient.printWorkingDirectory());
FTPFile[] files = ftpClient.listFiles();
if (0 == files.length) {// 目录为空 创建空目录
System.out.println("dir name: " +localPath );
new File(localPath ).mkdirs();
return;
}
File file = null;
for(FTPFile f:files){
if(f.isDirectory()){
downloadDirectory(basePath + File.separator + f.getName(), localPath + File.separator + f.getName());
}else{
file = new File(localPath);//先判断本地目录是否存在 --不存在则创建
if(!file.exists()){
file.mkdirs();
}
FileOutputStream fos = new FileOutputStream( localPath + File.separator + f.getName());
fos.flush();
ftpClient.setBufferSize(1024);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
System.out.println("fileName: " + f.getName());
if (ftpClient.retrieveFile(basePath + File.separator +f.getName(), fos)) {
System.out.println(" 文件下载成功。。");
} else {
System.out.println(" 文件下载失败。。");
fail("下载失败");
}
}
}
}
}
------------------------------------java socket实现文件的上传和下载-------------
import Java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
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.ServerSocket;
import java.net.Socket;
public class ServerScoket {
//服务器端
int port= 8822;//设置的端口号
public void UpFile(){//接受客户端上传的文件,并保存
try {
ServerSocket server= new ServerSocket(port);
while(true){
Socket socket = server.accept();
DataInputStream is = new DataInputStream(socket.getInputStream());
OutputStream os = socket.getOutputStream();
//1、得到文件名
String filename="E:\\";
filename += is.readUTF();
System.out.println("新生成的文件名为:"+filename);
FileOutputStream fos = new FileOutputStream(filename);
byte[] b = new byte[1024];
int length = 0;
while((length=is.read(b))!=-1){
//2、把socket输入流写到文件输出流中去
fos.write(b, 0, length);
}
fos.flush();
fos.close();
is.close();
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void DownFile(String filePath){
//接受客户端的下载请求,将本地文件传输给客户端
try {
while (true) {
ServerSocket server= new ServerSocket(port);
// 选择进行传输的文件
File fi = new File(filePath);
System.out.println("文件长度:" + (int) fi.length());
// public Socket accept() throws
// IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。
Socket socket = server.accept();
System.out.println("建立socket链接");
/* DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
dis.readByte();
*/
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
DataOutputStream ps = new DataOutputStream(socket.getOutputStream());
//将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java 4th里有现成的代码。
ps.writeUTF(fi.getName());
System.out.println(fi.getName());
ps.flush();
int bufferSize = 8192;
byte[] buf = new byte[bufferSize];
while (true) {
int read = 0;
if (fis != null) {
read = fis.read(buf);
}
if (read == -1) {
break;
}
ps.write(buf, 0, read);
}
ps.flush();
// 注意关闭socket链接哦,不然客户端会等待server的数据过来,
// 直到socket超时,导致数据不完整。
fis.close();
socket.close();
System.out.println("文件传输完成");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String arg[]) {
//String filepath="D:\\test.txt";
new ServerScoket().UpFile();
}
}
********************************************************************************************************************************************************
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.NET.Socket;
public class ClientScoket {
//客户端
private String ip = "localhost";// 设置成服务器IP
private int port = 8822;//设置端口号
public void UpFile(String filePath){
//上传文件,将本地文件传输到服务器端
try {
Socket socket = new Socket(ip,port);
while (true) {
// 选择进行传输的文件
File fi = new File(filePath);
System.out.println("文件长度:" + (int) fi.length());
/* DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
dis.readByte();
*/
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
DataOutputStream ps = new DataOutputStream(socket.getOutputStream());
//将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java 4th里有现成的代码。
ps.writeUTF(fi.getName());
ps.flush();
int bufferSize = 8192;
byte[] buf = new byte[bufferSize];
while (true) {
int read = 0;
if (fis != null) {
read = fis.read(buf);
}
if (read == -1) {
break;
}
ps.write(buf, 0, read);
}
ps.flush();
// 注意关闭socket链接哦,不然客户端会等待server的数据过来,
// 直到socket超时,导致数据不完整。
fis.close();
socket.close();
System.out.println("文件传输完成");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void DownFile(){
//从服务器端下载文件
try {
Socket socket = new Socket(ip,port);
while(true){
DataInputStream is = new DataInputStream(socket.getInputStream());
OutputStream os = socket.getOutputStream();
//1、得到文件名
String filename="E:\\";
filename += is.readUTF();
System.out.println("新生成的文件名为:"+filename);
FileOutputStream fos = new FileOutputStream(filename);
byte[] b = new byte[1024];
int length = 0;
while((length=is.read(b))!=-1){
//2、把socket输入流写到文件输出流中去
fos.write(b, 0, length);
}
fos.flush();
fos.close();
is.close();
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String arg[]) {
String filepath="D:\\test.txt";
new ClientScoket().UpFile(filepath);;
}
}
文件下载功能的实现思路:找到文件路径,取文件名,设置浏览器响应头,获取输入流,获取输出流,将输入流通过buffer转到输出流输出到浏览器
1.获取要下载的文件的绝对路径
2.获取要下载的文件名
3.设置content-disposition响应头控制浏览器以下载的形式打开文件
4.获取要下载的文件输入流FileInputStream
5.创建数据缓冲区buffer
6.通过response对象获取OutputStream流
7.将FileInputStream流写入到buffer缓冲区
8.使用OutputStream将缓冲区的数据输出到客户端浏览器
文件下载注意事项:编写文件下载功能时推荐使用OutputStream流,避免使用PrintWriter流,因为OutputStream流是字节流,可以处理任意类型的数据,而PrintWriter流是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失。
[java] view plain copy
package gacl.response.study;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author gacl
* 文件下载
*/
public class ResponseDemo02 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
downloadChineseFileByOutputStream(response);//下载中文文件
}
/**
* 下载中文文件,中文文件下载时,文件名要经过URL编码,否则会出现文件名乱码
* @param response
* @throws FileNotFoundException
* @throws IOException
*/
private void downloadChineseFileByOutputStream(HttpServletResponse response)
throws FileNotFoundException, IOException {
String realPath = this.getServletContext().getRealPath("/download/张家界国家森林公园.JPG");//获取要下载的文件的绝对路径
String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//获取要下载的文件名
//设置content-disposition响应头控制浏览器以下载的形式打开文件,中文文件名要使用URLEncoder.encode方法进行编码,否则会出现文件名乱码
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
InputStream in = new FileInputStream(realPath);//获取文件输入流
int len = 0;
byte[] buffer = new byte[1024];
OutputStream out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(buffer,0,len);//将缓冲区的数据输出到客户端浏览器
}
in.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
----------java实现ftp的文件上传和下载 --------------
import static org.junit.Assert.fail;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @version 创建时间:2015年12月14日 上午9:45:32
*
*/
public class JunitFtp {
private static FTPClient ftpClient;
private static String ftpIp = "192.168.0.229";
private static String ftpUser = "ff";
private static String ftpPassWord = "ff";
private static String ftpPort = "21";
private static String workingDirectory = "\\data";
private static String localDirectory = "E:\\home\\ftp\\download";
@BeforeClass
public static void setUpBeforeClass() throws Exception {
// ftp连接
ftpClient = new FTPClient();
ftpClient.setControlEncoding("gb2312");
ftpClient.connect(ftpIp, Integer.parseInt(ftpPort));
ftpClient.login(ftpUser, ftpPassWord);
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
ftpClient.disconnect();
}
/**
*单个文件下载
* @throws IOException
* "JiaYanFei"
* 2015年12月14日
*/
@Test
public void fileDownload() throws IOException {
// ftpClient.setControlEncoding("gb2312");
FileOutputStream fos = null;
try {
ftpClient.connect(ftpIp, Integer.parseInt(ftpPort));
ftpClient.login(ftpUser, ftpPassWord);
ftpClient.changeWorkingDirectory(workingDirectory);
System.out.println("dir:" + ftpClient.printWorkingDirectory());
FTPFile[] files = ftpClient.listFiles();
// FTP服务器文件路径
String remoteFileName = "\\data\\中.txt";// 已经切换到data目录只写 中.txt 也可以 但是 写\\中.txt不行
String newFileName = "文.txt";
// 文件下载存放路径
fos = new FileOutputStream(localDirectory + File.separator+ newFileName);
fos.flush();
ftpClient.setBufferSize(1024);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
if (ftpClient.retrieveFile(remoteFileName, fos)) {
System.out.println(" 文件下载成功。。");
} else {
System.out.println(" 文件下载失败。。");
fail("下载失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(fos);
ftpClient.disconnect();
}
}
@Test
public void fileUpload() throws IOException {
FileInputStream fis = null;
try {
ftpClient.connect(ftpIp, Integer.parseInt(ftpPort));
ftpClient.login(ftpUser, ftpPassWord);
ftpClient.changeWorkingDirectory("/data");
fis = new FileInputStream(new File("E:\\home\\ftp\\data\\o.txt"));
if (ftpClient.storeFile("/data/backFile3.txt", fis)) {// /backFile3.txt backFile3.txt也可以
System.out.println("上传成功!");
} else {
System.out.println("上传失败");
fail("上传失败");
}
} finally {
IOUtils.closeQuietly(fis);
ftpClient.disconnect();
}
}
/**
*目录下载
* @throws IOException
* 2015年12月14日
*/
@Test
public void downloadDirectory() throws IOException {
downloadDirectory("\\data" ,localDirectory+ "\\data");
}
/**
*目录递归下载
* @param basePath
* @param localPath
* @throws IOException
* 2015年12月14日
*/
public void downloadDirectory(String basePath, String localPath) throws IOException{
ftpClient.changeWorkingDirectory(basePath);
System.out.println(ftpClient.printWorkingDirectory());
FTPFile[] files = ftpClient.listFiles();
if (0 == files.length) {// 目录为空 创建空目录
System.out.println("dir name: " +localPath );
new File(localPath ).mkdirs();
return;
}
File file = null;
for(FTPFile f:files){
if(f.isDirectory()){
downloadDirectory(basePath + File.separator + f.getName(), localPath + File.separator + f.getName());
}else{
file = new File(localPath);//先判断本地目录是否存在 --不存在则创建
if(!file.exists()){
file.mkdirs();
}
FileOutputStream fos = new FileOutputStream( localPath + File.separator + f.getName());
fos.flush();
ftpClient.setBufferSize(1024);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
System.out.println("fileName: " + f.getName());
if (ftpClient.retrieveFile(basePath + File.separator +f.getName(), fos)) {
System.out.println(" 文件下载成功。。");
} else {
System.out.println(" 文件下载失败。。");
fail("下载失败");
}
}
}
}
}
------------------------------------java socket实现文件的上传和下载-------------
import Java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
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.ServerSocket;
import java.net.Socket;
public class ServerScoket {
//服务器端
int port= 8822;//设置的端口号
public void UpFile(){//接受客户端上传的文件,并保存
try {
ServerSocket server= new ServerSocket(port);
while(true){
Socket socket = server.accept();
DataInputStream is = new DataInputStream(socket.getInputStream());
OutputStream os = socket.getOutputStream();
//1、得到文件名
String filename="E:\\";
filename += is.readUTF();
System.out.println("新生成的文件名为:"+filename);
FileOutputStream fos = new FileOutputStream(filename);
byte[] b = new byte[1024];
int length = 0;
while((length=is.read(b))!=-1){
//2、把socket输入流写到文件输出流中去
fos.write(b, 0, length);
}
fos.flush();
fos.close();
is.close();
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void DownFile(String filePath){
//接受客户端的下载请求,将本地文件传输给客户端
try {
while (true) {
ServerSocket server= new ServerSocket(port);
// 选择进行传输的文件
File fi = new File(filePath);
System.out.println("文件长度:" + (int) fi.length());
// public Socket accept() throws
// IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。
Socket socket = server.accept();
System.out.println("建立socket链接");
/* DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
dis.readByte();
*/
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
DataOutputStream ps = new DataOutputStream(socket.getOutputStream());
//将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java 4th里有现成的代码。
ps.writeUTF(fi.getName());
System.out.println(fi.getName());
ps.flush();
int bufferSize = 8192;
byte[] buf = new byte[bufferSize];
while (true) {
int read = 0;
if (fis != null) {
read = fis.read(buf);
}
if (read == -1) {
break;
}
ps.write(buf, 0, read);
}
ps.flush();
// 注意关闭socket链接哦,不然客户端会等待server的数据过来,
// 直到socket超时,导致数据不完整。
fis.close();
socket.close();
System.out.println("文件传输完成");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String arg[]) {
//String filepath="D:\\test.txt";
new ServerScoket().UpFile();
}
}
********************************************************************************************************************************************************
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.NET.Socket;
public class ClientScoket {
//客户端
private String ip = "localhost";// 设置成服务器IP
private int port = 8822;//设置端口号
public void UpFile(String filePath){
//上传文件,将本地文件传输到服务器端
try {
Socket socket = new Socket(ip,port);
while (true) {
// 选择进行传输的文件
File fi = new File(filePath);
System.out.println("文件长度:" + (int) fi.length());
/* DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
dis.readByte();
*/
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
DataOutputStream ps = new DataOutputStream(socket.getOutputStream());
//将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java 4th里有现成的代码。
ps.writeUTF(fi.getName());
ps.flush();
int bufferSize = 8192;
byte[] buf = new byte[bufferSize];
while (true) {
int read = 0;
if (fis != null) {
read = fis.read(buf);
}
if (read == -1) {
break;
}
ps.write(buf, 0, read);
}
ps.flush();
// 注意关闭socket链接哦,不然客户端会等待server的数据过来,
// 直到socket超时,导致数据不完整。
fis.close();
socket.close();
System.out.println("文件传输完成");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void DownFile(){
//从服务器端下载文件
try {
Socket socket = new Socket(ip,port);
while(true){
DataInputStream is = new DataInputStream(socket.getInputStream());
OutputStream os = socket.getOutputStream();
//1、得到文件名
String filename="E:\\";
filename += is.readUTF();
System.out.println("新生成的文件名为:"+filename);
FileOutputStream fos = new FileOutputStream(filename);
byte[] b = new byte[1024];
int length = 0;
while((length=is.read(b))!=-1){
//2、把socket输入流写到文件输出流中去
fos.write(b, 0, length);
}
fos.flush();
fos.close();
is.close();
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String arg[]) {
String filepath="D:\\test.txt";
new ClientScoket().UpFile(filepath);;
}
}
相关推荐
一个基于棋牌、MMORPG游戏的分布式java游戏服务器,理论上可以无限水平扩展网关服,大厅服、游戏服达到人数承载。实现了集群注册中心,网关、登陆、后台服务器监控等通用服务器;封装了redis集群、mongodb等数据库...
HelloNative.java 准备调用C函数的java文件 HelloNative.lib 用VC编译生成的静态库文件 HelloNative.obj 用VB编译生成的目标文件 HelloNativeTest.java 测试本地化是否成功的类文件 instanceVar.java 定义一个...
Java通用后台管理系统源码 源码描述: 一、特色功能 1、采用Spring MVC的静态加载缓存功能,在首页将Javascript文件、CSS文件和图片等静态资源文件加载进来放进内存,极大提高ExtJS的加载速度。 2、三种皮肤主题:...
1、可以解决JAVA项目90%的重复性工作,可完全实现二次开发、满足90%项目需求,让开发更多关注业务逻辑。既能快速提高开发效率,帮助集团节省人力成本, 2、支持模块化设计,层次结构清晰。内置一系列企业信息管理...
该系统可作为OA、网站、电子政务...3、分别封装了模型层、控制层、业务逻辑层和数据持久层的通用操作模块,层次分明,大大减少代码冗余,二次开发效率高。 4、系统是公司多个项目的基础框架,稳定性好,支持大并发。
源代码:包括Java代码、配置文件和数据库脚本。这些代码展示了如何使用SSM框架进行业务逻辑处理、数据持久化和Web交互。 项目文件:除了代码,我还分享了整个项目的文件,包括设计稿、图标、图片等资源。这些资源...
所有的业务逻辑处理,均放在serviceimpl包下。调用规则均是:action--调用service接口--调用dao接口 5、由于使用了layui前端框架,为了保证代码清晰,每个html文件,均对应一个js文件处理,并且js文件名也和jsp...
代码结构清晰,逻辑严谨,是学习Java编程和项目实践的优秀材料。 毕业论文——包含了一篇探讨在线商城后台项目背景、技术原理和实现过程的学术论文,可作为论文撰写参考。通过阅读论文,学习者可以了解项目的理论...
实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 简单的通讯录类 226 实例149 简单的长度单位转换类 227 实例150 ...
## 项目介绍 提供快速的搭建spring,spring boot项目,提供spring boot阔展等,希望通过大家一起学习人人都可以堆各种组件当架构尸吓尿...下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
源代码:包括Java代码、配置文件和数据库脚本。这些代码展示了如何使用SSM框架进行业务逻辑处理、数据持久化和Web交互。 项目文件:除了代码,我还分享了整个项目的文件,包括设计稿、图标、图片等资源。这些资源...
第1章 Java EE的基本知识 1 1.1 Java EE的出现及其特点 1 1.2 Java EE的分层模型和平台组成 4 1.2.1 Java EE的分层模型 4 1.2.2 Java EE的结构变形 5 1.2.3 Java EE平台的组成 7 1.3 Java EE参与人员的...
采用三层构架以后,用户界面层通过统一的接口向业务层发送请求,业务层按自己的逻辑规则将请求处理之后进行数据库操作,然后将数据库返回的数据封装成类的形式返回给用户界面层。这样用户界面层甚至可以不知道数据库...
系统可作为OA、网站、电子政务、...3、分别封装了模型层、控制层、业务逻辑层和数据持久层的通用操作模块,层次分明,大大减少代码冗余,二次开发效率高。 4、系统是公司多个项目的基础框架,稳定性好,支持大并发。
3、分别封装了模型层、控制层、业务逻辑层和数据持久层的通用操作模块,层次分明,大大减少代码冗余,二次开发效率高。 4、系统是公司多个项目的基础框架,稳定性好,支持大并发。 二、主要功能 1、采用ExtJS 4.2...
学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...
《Java项目开发全程实录》这一本书从开发背景、需求分析、系统功能分析、数据库分析、数据库建模、网站开发和网站发布或者程序打包与运行,每一过程都进行了详细的介绍。 目 录 第1章 进销存管理系统(Swing+SQL ...
通过配置文件或注解,对象的创建和绑定由Spring容器管理,而不是由应用程序代码直接控制。 面向切面编程(AOP):Spring支持AOP,允许定义方法拦截器和切点来分离应用程序的业务逻辑和系统服务。这有助于增加模块化...
源代码和数据库设计:提供全面的源代码和数据库设计文件,使学生能够详细了解应用的开发过程,包括前端界面设计和后端逻辑处理。 系统托盘功能:特别设计系统托盘功能,使应用能够在后台运行,便于用户随时访问和...
本项目根据企业项目的逻辑制作的个人blog,分为前后台系统,结合最新springboot、mybatis、yml配置文件、文件上传等技术点完成,可以学习该项目的技术点,若下载后不可用,请留言,并给我邮箱,重发一份给你,若想...