`
dupengtao
  • 浏览: 33079 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

黑马程序员_基础复习八(网络编程)

 
阅读更多

----------------------------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();
	}
}


 

----------------------------android培训java培训、期待与您交流!----------------------------------
分享到:
评论

相关推荐

    黑马程序员_Java基础辅导班教程课件[第01期]第4天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第4天"中,我们可以推测这是针对初学者的Java编程课程,旨在帮助学员掌握Java的基础知识。 在课程的第4天,可能讲解了以下核心概念: 1. **类(Class)**:`Demo.class...

    黑马程序员_Java基础辅导班教程课件[第01期]第12天

    黑马程序员提供的"Java基础辅导班教程课件[第01期]第12天"旨在帮助学员深入理解Java语言的核心概念,进一步提升编程技能。在这个阶段的学习中,学员将接触到Java的高级特性以及实际应用。 首先,"day12"这个目录很...

    解析Python网络爬虫_复习大纲.docx

    解析Python网络爬虫_复习大纲.docx 本文档是关于Python网络爬虫的复习大纲,涵盖了爬虫的基本概念、实现原理、技术、网页请求原理、抓取网页数据、数据解析、并发下载、抓取动态内容、图像识别与文字处理、存储爬虫...

    黑马程序员入学测试题

    【标题】:“黑马程序员入学测试题”是一份用于评估编程基础和理解能力的测试集,主要针对准备加入黑马程序员培训课程的学生。这份测试题旨在帮助新手程序员检验自己的知识水平,以便更好地适应学习环境。 【描述】...

    黑马程序员java面试宝典 完整版PDF.rar

    《黑马程序员Java面试宝典》是一本...通过《黑马程序员Java面试宝典》的学习,你可以系统地复习和掌握这些知识点,提高自己的面试竞争力。书中的问题和解答将帮助你更好地理解Java编程的本质,提升在面试中的自信心。

    《Java基础入门(第3版)》(Java):课后答案-docx文档

    第二章讲解了Java编程基础,包括关键字(如"class")、注释类型(单行、多行和文档注释)、数据类型(如基本数据类型和引用数据类型),以及条件判断和循环结构中的`break`和`continue`语句的使用。 第三章进一步...

    Java-集合的例题 & 例题源码 & PPT教学文档(黑马程序员详细版).rar

    本资料包是黑马程序员提供的详细教程,涵盖了Java集合的例题、源码以及配套的PPT教学文档,旨在帮助学习者深入理解和掌握Java集合的使用。 首先,我们来探讨Java集合框架的基本概念。Java集合框架包括接口和实现类...

    Java基础教程(第3版)_ppt.rar

    《Java基础教程(第3版)_ppt.rar》是一个包含多个PPT文件的压缩包,主要用于教学目的,提供了关于Java编程语言的基础知识。这个资源涵盖了Java的核心概念,从基本的类和对象到高级特性如多线程和数据库操作。以下是...

    黑马程序员西安校区前端学科面试宝典-2019.pdf

    总体来说,黑马程序员西安校区的这份前端学科面试宝典,覆盖了前端领域诸多核心知识点。对于想要从事前端工作的求职者来说,这份面试宝典是一个非常好的学习和准备材料。通过复习和理解宝典中的问题,求职者可以更好...

    程序员复习系统全面.zip

    总的来说,"程序员复习系统全面.zip"是一个全面的资源库,旨在帮助程序员巩固基础,提升技术广度和深度,同时也提醒我们在忙碌的工作中不应忽视基础知识的学习和更新。通过系统地复习这些内容,不仅可以为面试做好...

    黑马程序员JAVA面试宝典2018年5月最新版

    《黑马程序员JAVA面试宝典2018年5月最新...总的来说,《黑马程序员JAVA面试宝典2018年5月最新版》是一本全面覆盖Java开发各方面的面试准备书籍,它能够帮助Java开发者系统地复习和提升技能,以应对日益激烈的竞争环境。

    黑马程序员资料参考.docx

    北京黑马程序员培训是一家专注于IT技术教育的机构,提供多种编程语言和互联网技术的课程,包括JAVA、Android和IOS等方向。该机构致力于帮助学员提升技能,实现职业发展。以下是关于北京黑马培训的一些详细信息: ...

    黑马程序员面试宝典(java).7z

    通过学习《黑马程序员面试宝典》,开发者不仅可以深入理解Java的核心概念和技术,还能了解企业在招聘时关注的热点问题,从而有针对性地进行复习和准备。这份资料提供的面试真题解析更是能帮助开发者模拟实战,提前...

    javaweb复习资料,黑马程序员视频

    JavaWeb是Java编程领域的一个重要方向,主要用于构建Web应用程序。这个复习资料主要涵盖了Eclipse的使用、程序的断点调试、Eclipse常用快捷键、JUnit测试框架、Java 5的新特性(静态导入和自动装箱拆箱)以及增强for...

    黑马程序员入学Java知识

    ### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机执行一系列任务的过程。 2. **Java语言概述,历史、特点** - **概述**:Java是一种...

    Python学习资料整理

    总之,这个"Python学习资料整理"压缩包涵盖了Python编程的各个方面,无论是基础语法、进阶特性,还是数据处理、网络编程、机器学习,都提供了丰富的学习资源。通过深入学习和实践,你可以逐步掌握Python编程,并应用...

    2018-2019年黑马最新版Java程序员面试宝典+题库pdf

    《2018-2019年黑马最新版Java程序员面试宝典+题库pdf》是一份集合了近年来Java编程领域重点知识和面试常见问题的综合资源。这份资料主要针对初级Java程序员,旨在帮助他们巩固基础知识,掌握面试技巧,以便在求职...

    C++课程的基础课件

    C++课程的基础课件主要针对的是初学者,旨在教授C++这一强大且广泛应用的编程语言。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的程序设计语言。在本课程中,...

    C语言二级考试题库,帮助你实现程序员的前提条件

    C语言是计算机编程的基础,尤其对于想要成为程序员的人来说,掌握C语言是至关重要的。这个名为"C语言二级考试题库,帮助你实现程序员的前提条件"的压缩包,显然是为准备计算机等级考试二级C语言部分的考生量身打造的...

Global site tag (gtag.js) - Google Analytics