字符流与网络编程

 

package com.zking.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;

public class Demo_02 {

    public static void main(String[] args) throws Exception {

  
        // 1.字符流的使用
        // IO流中按照流的类型可以分为字节流|字符流
        // IO流中描述字符流的老祖宗,抽象类,不能实例化
        // Reader--读取,输入流
        // Writer--写入,输出流
        // 字符流:专门用来读取和写入文本文件操作的。

        // 总结:流对象但凡是以Reader或者Writer结尾的都是字符流

        // 子类:可以操作文件
        // FileReader--字符输入流,读取
        // FileWriter--字符输出流,写入

        // 字符流的操作流程:与字节流一毛一样

        // 1.演示 FileReader
        // 需求:读取文本文件中的内容
        // File file = new File("D:\\hello.txt");
        // FileReader fr = new FileReader(file);
        // 调用读取内容的方法
        // int read = fr.read();
        // System.out.println((char)read);
        // //当内容全部读取完毕后,如果再次读取----结果-1
        // int read2 = fr.read();
        // System.out.println(read2);

        // 一次读取一个字符,通过循环结构一次性读取出来
        // while(true) {
        // //读取一个字节
        // int read = fr.read();
        // //先判断
        // if(read == -1) {break;}
        // System.out.println((char)read);
        // }
        // //关闭资源
        // fr.close();

        // 一次读取一个字符数组
        // char[] chs = new char[1024];
        // while(true) {
        // int read = fr.read(chs);
        // if(read == -1) {
        // break;
        // }
        // System.out.println(new String(chs,0,read));
        // }

        //2.演示FileWriter
        //编写内容到文件中
//        File file = new File("D:\\杨文广写给王嘉庆的休书.txt");
//        FileWriter fw = new FileWriter(file);
        //一次写入一个字符
//        fw.write('爱');
//        fw.close();
        
        //一次写入一个字符数组
        //toCharArray 将字符串转换成字符数组
//        fw.write(new String("我喜欢你很久了,但是分手吧").toCharArray());
//        fw.close();
        
        //一次写入一个字符串
//        fw.write("哈哈,爱不爱我?");
//        fw.close();
        

        // 2.中间转换流的使用

        // 3.网络编程的使用

    }

}

==========字符流==========
一:读
-----------
1、一个字符一个字符的读
		FileReader fr = new FileReader(file);
		int n = 0;
		while((n=fr.read())!=-1){
			System.out.println((char)n);相比字节流 哪怕是一个一个读 也能读出中文
		}
		fr.close();

2、一行一行的读:我们聊天也是一行一行的发送 不是一个字一个字的发送

		File file = new File("f:\\图片\\6.txt");
		FileReader fr = new FileReader(file);
		BufferedReader br = new BufferedReader(fr);
		String str = null;
		while((str = br.readLine())!=null){
			System.out.println(str);
		}
		br.close();
		fr.close();

二:写
-------------
过两天的聊天:我将一个东西写到网络上,通过网络把数据传给对方 对方读取我的内容 所以先讲io再讲网络聊天

1、不能换行
		File file = new File("f:\\图片\\6.txt");
		FileWriter fw = new FileWriter(file);		fw.write("我想你了");
		fw.write("但是每次我都不敢打扰你");			fw.close();
		System.out.println("呵呵");

2、实现换行
		Scanner mys = new Scanner(System.in);
		File file = new File("f:\\图片\\6.txt");
		FileWriter fw = new FileWriter(file);
		BufferedWriter bw = new BufferedWriter(fw);
		while(true){
			System.out.println("请输入你要保存的内容:");
			String str = mys.next();
			bw.write(str);
			bw.flush();//务必记得刷新缓冲区
			bw.newLine();//新起一行
			if(str.equals("exit")){
				break;
			}
		}
bw
		bw.close();
		fw.close();

-------------------------------
三、net网络
1.获取自己的电脑
	InetAddress inet = InetAddress.getLocalHost();
	System.out.println(inet.getHostName());

2.获取局域网中别人的电脑
	InetAddress inet = InetAddress.getByName("192.168.1.55");

3.获取互联网中的电脑
url:统一资源定位符  域名:www.baidu.com  http:超文本传输协议 
 
	URL url = new URL("https://www.taobao.com");
	InputStream is = url.openStream();//字节流

	File file = new File("f:\\图片\\taobao.html");
	FileOutputStream fos = new FileOutputStream(file);
	BufferedOutputStream bos = new BufferedOutputStream(fos);

	int n = 0;
	while((n = is.read())!=-1){//每次从服务器读取一个字节
		bos.write(n);//将数据写入本地
		bos.flush();//刷新
	}
bos.close();
		fos.close();
		is.close();


----------如何转换为字符再写入到本地文件中


	URL url = new URL("https://www.taobao.com");
	InputStream is = url.openStream();//字节流
		
//三种支持汉字的编码方式:  gbk  utf-8  gb2312
	InputStreamReader isr = new InputStreamReader(is,"utf-8");
	BufferedReader br = new BufferedReader(isr);
	File file = new File("f:\\图片\\taobao1.html");
	FileWriter fw = new FileWriter(file);
	BufferedWriter bw = new BufferedWriter(fw);
	String str = null;
	while((str=br.readLine())!=null){//从服务器读取一行
	bw.write(str);//将该行写入到本地文件中
	bw.flush();//刷新
}
	bw.close();
//	fw.close();
//	br.close();
//	isr.close();
//	is.close();

网络上下载网址源代码 以及图片

package com.zking.test2;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.URL;

public class Demo_01 {
	public static void main(String[] args) throws Exception {
		//java.net  网络编程
		
		//1.网络编程---通过java程序让设备与设备之间在同一个局域网内能够进行数据交互。
		//2.实现网络编程的要素(3个)
		//(1)IP地址-----手机号
		//(2)端口号--一个应用程序对应一个独一无二的端口号(身份标识)
		//(3)网络通信传输协议----规则
		//		理论性传输协议---ISO模型---7层
		//      实际性传输协议---TCP|ip协议
		//			TCP|IP通信协议下:
		//                TCP协议|UDP协议
		
		
		//3.java.net包中提供网络编程常用的类
		//1.InetAddress----获取电脑的IP地址|名称
		//2.URL类----统一资源定位符
		//  使用URL类定位到网站上的各种资源,将其下载下来。
		//3.TCP--Socket套接字--网络编程
		
		
		//InetAddress类:获取电脑的IP地址
		//DESKTOP-UQJ8USB/193.168.5.184  
		//获取本机电脑的名称和IP地址
		InetAddress localHost = InetAddress.getLocalHost();
		System.out.println(localHost);
		//193.168.5.184 获取IP地址
		String hostAddress = InetAddress.getLocalHost().getHostAddress();
		System.out.println(hostAddress);
		//DESKTOP-UQJ8USB 电脑名称
		String hostName = InetAddress.getLocalHost().getHostName();
		System.out.println(hostName);
		
		//getByName("对方电脑的IP地址"); 
		InetAddress byName = InetAddress.getByName("127.0.0.1");
		System.out.println(byName.getHostAddress());
		System.out.println(byName.getHostName());
		
		//www.baidu.com/14.215.177.38  百度
		InetAddress byName2 = InetAddress.getByName("www.baidu.com");
		System.out.println(byName2);
		
		
		
		//URL编程--统一资源定位符
		//作用:可以定位到网站上的某一个资源,通过URL对象将网络流打开并激活
		//通过网络流进行下载与上传。
		
		//https://blog.csdn.net/qq_38616723/article/details/85345567
		//URL---地址(网络协议+域名+端口号+资源+页面+参数)
		
		//1.https://  网络协议  http://  ftp://
		//2.blog.csdn.net 域名(字符组成,IP地址)
		//2.1 端口号
		//3.qq_38616723 资源
		//4.页面 article/details/85345567 
		//5.参数: ?username=admin
		
		
		//如何通过URL编程是实现图片的下载
		/**
		 * 1.通过URL对象定位到网站的某一个资源
		 * 2.通过URL对象打开并且激活网络流(去读取)
		 * 3.将资源读取到内存上然后在通过输出流的方式将内容写到文件中
		 * 4.关闭所有资源
		 */
		
		//https://tse3-mm.cn.bing.net/th/id/OIP-C.fukbtDU_8mHJmsTQ2glnmwHaMW?pid=ImgDet&rs=1
		
		//1.通过URL对象定位到网站的某一个资源
		URL url = new URL("https://tse3-mm.cn.bing.net/th/id/OIP-C.fukbtDU_8mHJmsTQ2glnmwHaMW?pid=ImgDet&rs=1");
		//2.通过URL对象打开并且激活网络流(去读取)
		InputStream is = url.openStream();
		//2.1 转成缓冲流
		BufferedInputStream bis = new 
				 BufferedInputStream(is);
		
		//创建输出流写入(将资源读取到内存上然后在通过输出流的方式将内容写到文件中)
		File file = new File("D:\\1.jpg");
		FileOutputStream fos = new FileOutputStream(file);
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		
		//3.读取到内存上
		byte[] buf = new byte[1024];
		int len = 0;
		while(-1!=(len = bis.read(buf))) {
			//每次读取一个字节数组立刻写入文件中
			bos.write(buf,0,len);
			bos.flush();
		}
		System.out.println("美女下载成功");
		//关闭资源
		bos.close();
		fos.close();
		bis.close();
		is.close();
		
		
		//网页下载
		URL url = new URL("https://www.baidu.com/");
		InputStream is = url.openStream();
		InputStreamReader isr = new InputStreamReader(is,"UTF-8");	
		BufferedReader br = new BufferedReader(isr);
		
		//输出
		File file = new File("D:\\sb.html");
		FileOutputStream fos = new FileOutputStream(file);
		OutputStreamWriter osw = new OutputStreamWriter(fos);//转 字节转字符
		BufferedWriter bw = new BufferedWriter(osw);
		
		String str = "";
		while(null!=(str = br.readLine())) {
			bw.write(str+"\n");
			bw.newLine();
			bw.flush();
		}

		
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值