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