- 浏览: 101730 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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);;
}
}
相关推荐
Java后台管理系统后台代码是一个用于构建企业级Web应用的框架或示例项目,它通常包含了诸如用户管理、权限控制、数据操作、业务逻辑等核心功能。这个压缩包中的内容可能涵盖了一个完整的Java后端项目的各个组成部分...
总的来说,"java 文件上传服务器,前后台代码"项目涉及了Java Web开发的核心技术,包括SpringMVC的请求处理、文件操作、异常处理、MyBatis的数据库操作以及前端与后端的交互,这些都是开发人员必备的技能。...
通过分析和实践这个【Java版通讯录后台代码】项目,学习者可以巩固对Java基础知识的理解,包括类与对象、文件操作、数据库交互、控制台输入/输出以及设计模式的应用。同时,这也是迈向更复杂系统开发的第一步,如...
综上所述,这个Java社交项目后台代码涵盖了Java Web开发的多个重要方面,包括后端架构设计、数据库操作、文件处理、用户交互以及系统测试等。对于学习和理解SSM框架以及社交应用的后端开发流程有着极大的帮助。通过...
然后,通过分析Java后台代码,理解文件处理和服务端逻辑;最后,编写前端代码并与后端交互,进行实际的页面集成和功能测试。 通过上述内容,我们可以了解到DSOframer是一个强大的文档预览解决方案,涉及前端...
6. **错误处理和日志记录**:为了确保系统的稳定性和可追踪性,后台代码会包含异常处理机制和日志记录。错误信息应清晰,便于排查问题。 7. **安全措施**:后台代码需要考虑的安全问题包括防止SQL注入、XSS攻击、...
这个"微信支付java后台代码"项目,根据标题和描述,提供了一套完整的、经过测试可用的解决方案,适用于Java开发者集成到自己的应用程序中。下面将详细介绍相关的知识点。 **1. 微信支付API** 微信支付提供了丰富的...
JavaOA后台部分代码是OA(Office Automation)项目中的核心组成部分,主要负责处理业务逻辑、数据交互和系统控制等任务。这个代码库包含了实现各种OA系统功能的JAVA代码,为开发者提供了一个良好的学习和参考资源。...
首先,标题"前台从java后台获取excel表格并下载"表明我们需要实现一个功能,即前端用户请求时,由Java后台生成Excel文件,然后提供下载链接或直接触发下载。这个过程涉及到的主要技术栈是Eclipse、Maven、Spring MVC...
在Java Web开发中,后台模板通常指的是用于处理业务逻辑、数据操作以及与前端交互的代码框架。它们可以帮助开发者快速搭建功能模块,减少重复编码的工作量,使开发过程更加高效。这些模板通常基于MVC(Model-View-...
Java后台代码通常涉及到Spring框架、MyBatis等技术,Spring用于管理应用程序的组件和依赖关系,提供AOP(面向切面编程)和IOC(控制反转)等功能,是企业级应用开发的首选。MyBatis则是一个轻量级的持久层框架,它...
在学习过程中,你可以通过分析“cards.7z”这个压缩文件中的代码,了解如何在SSM框架下设计和实现数据库操作、业务逻辑处理以及视图渲染。此外,"erp.sql"文件很可能是数据库脚本,用于初始化或更新系统的数据库结构...
开发者可以在JSP中混合Java代码和HTML,方便进行页面逻辑处理。 **6. 后台管理系统** 项目包含一个后台管理系统,允许管理员进行内容管理、用户管理、权限控制等操作。后台通常包括登录验证、角色管理、菜单设置、...
- **下载处理逻辑**:在`downLoadBillFormat`方法中,首先对文件名进行URL编码,然后设置HTTP响应头`Content-Disposition`为`attachment`,表明该响应内容应被客户端作为附件下载。 4. **XML配置**: ```xml ...
本资源提供了一个完整的解决方案,涵盖了从Android客户端到后台服务器的整个流程,包括头像的上传与裁剪、文件上传、文件在线预览以及下载。以下是关于这些功能的详细知识点: 1. **头像上传与裁剪**: - 使用`...
### Java多线程加队列上传文件_后台处理 #### 概述 本文将详细介绍一个基于Java实现的多线程文件上传系统,并结合队列管理技术来优化后台处理流程。该系统通过创建多个线程来并行处理客户端的文件上传请求,同时...
在后台管理系统中,Java常用于实现业务逻辑、数据处理和系统接口。 二、MVC架构模式 基于Java的后台管理系统通常采用Model-View-Controller(MVC)架构模式。Model负责数据模型,View负责用户界面展示,Controller...
在本文中,我们将深入探讨"前端签到与后台逻辑代码实现"这一主题,结合使用SpringBoot、Java、MySQL和Maven的技术栈。签到功能是许多应用程序中的常见特性,它允许用户确认他们的在线状态或者参与特定活动。我们将...
在本资源中,我们拥有一套完整的Android社交应用与Java Web后台系统的源代码,这为开发者提供了一个绝佳的学习和实践平台。这套源代码是基于Android Studio和MyEclipse开发的,涵盖了客户端应用和服务器端服务的全部...
- 在后台 Java 代码中处理用户提交的数据,并调用前面提到的 FTP 客户端类进行文件的下载。 - 可以使用 Struts 的 `Action` 接口来实现具体的业务逻辑。 ### 4. 常见问题及解决方案 #### 登录失败 - 如果出现登录...