- 浏览: 31298 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
-
hyjasonlee:
birthday 为Date 能取数据出来吗?我用sqlite ...
利用dbutils框架简化jdbc开发
----------------------------android培训、java培训、期待与您交流!----------------------------------
文件上传案例分析
一、需求分析
1.多线程服务器, ServerSocket监听指定端口,在单独线程中接收文件
2.客户端,读键盘接受文件名,上传文件
3.文件上传,读文件,上传服务器,写文件
二、实现步骤
1.实现服务器
1)ServerSocket 绑定端口
2)在循环中,调用accept方法等待客户端的连接请求
3)new Thread(new UploadServicer(socket)).start(); 开启多线程运行服务程序
4)UploadServicer中,定义构造函数接受socket,run方法中写服务代码
5)获得输入输出流 getInputStream getOutputStream
2.实现客户端
1)创建客户端Socket
2)获得输入输出流 getInputStream getOutputStream
3)和服务器端进行信息交互
3.欢迎语
1)服务器端out.write
2)客户端 in.read
4.发送文件名
1)客户端
1.1 读键盘,让用户输入一个文件的路径,BufferedReader包装System.in
1.2 判断,是不是标准文件,判断文件是否存在,如果不是,给出相应的错误信息
1.3 如果是个存在的文件,getName获得文件名,用out.write将文件名写给服务器
2)服务器端
1.1 in.read 阻塞,接受文件名
1.2 在服务器端指定一个文件夹存放上传的文件, e:/upload
1.3 在指定的文件夹下创建同名文件
1.4 如果创建失败,告诉客户端无法上传 如果文件已存在,告诉客户端文件存在, 程序不能再继续
1.5 如果创建成功,告诉客户端可以开始上传 out.write("可以上传文件".getBytes())
5.发送文件
1)客户端
1.1 获得服务器的反馈信息,如果不能上传,return
1.2 如果可以上传,
BufferedInputStream包装FileInputStream,读文件
BufferedOutputStream包装out(连着服务器),写出数据
int ch;
while((ch=bis.read())!=-1)
bos.write(ch);
bos.flush();
2)服务器端
1.1 BufferedInputStream包装in(连着客户端),读取数据
BufferedOutputStream包装FileOutputStream,将数据写入文件
int ch;
while((ch=bis.read())!=-1)
bos.write(ch);
bos.flush();
服务器端:
package com.du; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class Server implements Runnable { private Socket s = null; public Server(Socket s) { // TODO Auto-generated constructor stub this.s = s; } @Override public void run() { File mulu = new File("d:\\images"); int i = 1; File file = new File(mulu, (i++) + ".jpg"); try { InputStream in = s.getInputStream(); byte[] buffer = new byte[1024]; int len = 0; FileOutputStream out = new FileOutputStream(file); while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } out.close(); in.close(); s.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub ServerSocket ss = new ServerSocket(22222); while (true) { Socket s = ss.accept(); new Thread(new Server(s)).start(); } } }
客户机端:
package com.du; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String[] args) throws Exception { Socket s = new Socket("127.0.0.1", 22222); File file = new File("e:\\du.jpg"); if(!file.exists()){ throw new RuntimeException("文件不存在"); } InputStream in = new FileInputStream(file); byte[] buffer = new byte[1024]; int len = 0; OutputStream out = s.getOutputStream(); while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } s.shutdownOutput(); out.close(); in.close(); } }
分离文件:
package com.du; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.SequenceInputStream; import java.util.Enumeration; import java.util.Vector; import org.junit.Test; public class SplitFile { @Test public void split() throws Exception { File file = new File("d:\\images\\2.jpg"); FileInputStream in = new FileInputStream(file); byte[] buffer = new byte[1024 * 30]; int len = 0; int i = 1; while ((len = in.read(buffer)) != -1) { FileOutputStream out = new FileOutputStream("d:\\" + (i++) + ".du"); out.write(buffer, 0, len); out.close(); } in.close(); } @Test public void merge() throws Exception { File root = new File("d:\\"); File[] dufile = root.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { // TODO Auto-generated method stub return pathname.getName().endsWith(".du"); } }); Vector<FileInputStream> v = new Vector<FileInputStream>(); for (File f : dufile) { v.add(new FileInputStream(f)); } Enumeration<FileInputStream> en = v.elements(); SequenceInputStream sis = new SequenceInputStream(en); FileOutputStream out = new FileOutputStream("d:\\peng.jpg"); byte[] buffer = new byte[1024 * 30]; int len=0; while((len=sis.read(buffer))!=-1){ out.write(buffer, 0, len); } out.close(); sis.close(); } }
发表评论
-
黑马程序员_javaweb(response)
2012-12-02 21:29 711----------------------------and ... -
黑马程序员_javaweb(servletcontext)
2012-12-02 21:21 770----------------------------and ... -
黑马程序员_交通灯系统和银行调度系统
2012-12-02 21:07 634----------------------------and ... -
黑马程序员_高新技术
2012-12-02 10:08 730----------------------------and ... -
黑马程序员_基础复习七(IO)
2012-11-28 22:59 587----------------------------and ... -
黑马程序员_基础复习六(集合)
2012-11-26 23:18 564----------------------------and ... -
黑马程序员_基础复习五(线程)
2012-11-25 18:17 676----------------------------and ... -
黑马程序员_基础复习四(异常)
2012-11-24 22:04 657----------------------------an ... -
黑马程序员_基础复习三(内部类、接口)
2012-11-23 08:22 714----------------------------and ... -
黑马程序员_基础复习二(面向对象、多态)
2012-11-19 21:06 517----------------------------and ... -
黑马程序员_基础复习一(数组、排序、面向对象)
2012-11-16 00:08 587----------------------------and ...
相关推荐
黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip
黑马程序员_hibernate框架开发2016版讲义和笔记资料_day02
黑马程序员_hibernate框架开发2016版讲义和笔记资料_day1_day2_day3_day4 包含4天的教学文档
黑马程序员_Java基础辅导班教程课件[第01期]第15天
黑马程序员_iOS基础视频_最适合初学者入门video,百度云链接。
黑马程序员__移动商城项目实战 包括黑马程序员乐淘商城实战和慕课React+Antd
黑马程序员_超全面的JavaWeb教程-视频+源码笔记
马程序员_黎活明__Spring如何装配各种集合类型的属性.ppt )
黑马程序员_Java基础辅导班教程课件[第01期]第12天
黑马程序员_Java基础辅导班教程课件[第01期]第8天
黑马程序员_Java基础辅导班教程课件[第01期]第11天
黑马程序员_Java基础辅导班教程课件[第01期]第12天
黑马程序员_毕向东_Java基础视频教程第22天-06-GUI(Action事件).zip
传智播客_javaWEB讲义和笔记资料_day09 黑马程序员_javaWEB教程讲义和笔记资料_day09
黑马程序员_android实例教程,网上找的的安卓教材,真心不错。
( 01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip )
黑马程序员_毕向东_Java基础视频教程第18天-09-IO流(文件的续写)
黑马程序员_javaWEB讲义和笔记资料_day08 传智播客_javaWEB讲义和笔记资料_day08
黑马程序员_JDBC视频教程,仅供参考学习,有需要的可以下载,本人有全栈开发工程师各种学习技术视频教程及本档,有需要的可以留言或到本人账号下载
黑马程序员_毕向东_Java基础视频教程第18天-12-IO流(文本文件读取练习).zip