Day31

*File.separator : 分隔符(\)

*通过byte数组进行读取和写入

public static void m2(File file) throws IOException{InputStream is = new FileInputStream(file);byte[] b = new byte[4];int count = -1;//·返回读取到了多少个元素,如果没有读取到返回-1while((count = is.read(b)) != -1){for(int i = 0; i < count; i++){System.out.println((char)b[i]);}}
}

*同时使用输入和输出流,实现奖一个文件中的内容读取出来,添加上新的信息,再写入。

import java.io.*;public class TestPutAndOut {public static void main(String[] args) {FileInputStream fis = null;FileOutputStream fos = null;try {//·同一个文件对象,不能同时有输入和输出流(流是单向的)。fis = new FileInputStream("test.txt");//·读取文件内容byte[] b = new byte[1024];//·返回读取的个数,并保存在count中int count = fis.read(b);String str = new String(b,0,count);//·再写入内容fos = new FileOutputStream("test.txt");fos.write((str+"哈哈哈哈").getBytes());} catch (IOException e) {e.printStackTrace();}finally {//·关闭流CloseStream.close(fis);CloseStream.close(fos);}}
}

*使用输入和输出流,复制一个jpg文件。

import java.io.*;public class TestCopyImage {public static void main(String[] args) {FileInputStream fis = null;FileOutputStream fos = null;try {//·输入流在读取时,如果没有该文件会出现FileNotFoundExceptionfis = new FileInputStream("test1.jpg");//·输出流在写入时,如果没有该文件则会创建该文件,但是不会自动创建文件夹fos = new FileOutputStream("a.jpg");int result = -1;//·循环读取test1.jpg之后写入a.jpgwhile ((result = fis.read()) != -1) {fos.write(result);}} catch (IOException e) {e.printStackTrace();}finally{//·关闭流CloseStream.close(fis);CloseStream.close(fos);}}
}

*输入流和输出流:

输入: 字节流:FileInputStream / BufferedInputStream(带缓冲区)

​ 字符流:FileRead / BufferedRead(带缓冲区)

输出: 字节流:FileOutputStream / BufferedOutputStream(带缓冲区)

​ 字符流:FileWriter / BufferedWriter(带缓冲区)

字节流用于二进制数据的输入和输出;字符流用于文本文档的输入和输出

*缓冲流:BufferedInputStream、BufferedOutputStream

import java.io.*;public class TestBuffered {public static void main(String[] args) throws IOException {OutputStream is = new FileOutputStream("test.txt");BufferedOutputStream bos = new BufferedOutputStream(is);//·调用write方法时,写入的值是保存在缓冲区(数组)当中的bos.write('a');bos.write('b');bos.write('c');//·调用flush方法,讲缓冲区中的值一次性写入到文件中。bos.flush();//·关闭这个缓冲流时,会自动调用flush方法。bos.close();}
}

​ 比较使用缓冲区和不适用缓冲区的效率:使用缓冲区效率明显提高

package com.qianfeng.pm;import java.io.*;import com.qianfeng.am.CloseStream;public class TestBufferedCopyImage {public static void main(String[] args) {BufferedInputStream fis = null;BufferedOutputStream fos = null;try {//·Buffered是一个包装类,传入一个file对象。fis = new BufferedInputStream(new FileInputStream("test.MP4"));fos = new BufferedOutputStream(new FileOutputStream("copy\\test.MP4"));int result = -1;//·循环读取test1.jpg之后写入a.jpgwhile ((result = fis.read()) != -1) {fos.write(result);}} catch (IOException e) {e.printStackTrace();}finally{//·关闭流CloseStream.close(fis);CloseStream.close(fos);}}
}

*字符输入和输出流:FileReader extends InputStreamReader(FileReader里面没有自己的方法,所以这两个都是字符输入流),字符输出流同理。

​ 从使用上来说,和字节输入输出流没有区别

import java.io.*;
import com.qianfeng.am.CloseStream;public class TestFileRead {public static void main(String[] args) {FileReader fis = null;try {fis = new FileReader("test.txt");int result = -1;while((result = fis.read()) != -1) {System.out.print((char)result);}} catch (IOException e) {e.printStackTrace();}finally{CloseStream.close(fis);}}
}import java.io.*;
import com.qianfeng.am.CloseStream;public class TestFileWriter {public static void main(String[] args) {FileWriter fis = null;try {fis = new FileWriter("test.txt",true);//·追加写入//·调用write方法时,会在文件内容的后面追加写入fis.write("你好111");} catch (IOException e) {e.printStackTrace();}finally{CloseStream.close(fis);}}
}

​ 字符的缓冲流:

package com.qianfeng.pm;import java.io.*;
import com.qianfeng.am.CloseStream;/*** @author 吴一凡*   字符缓冲流的不同点:单一行读取和换行。*/
public class TestBufferedReaderWriter {public static void main(String[] args) {BufferedReader br = null;BufferedWriter bw = null;try {br = new BufferedReader(new FileReader("test.txt"));bw = new BufferedWriter(new FileWriter("testcopy.txt",true));//·只读取一行的信息String str = br.readLine();bw.write(str);bw.newLine();bw.write("使用字符缓冲流写入");} catch (IOException e) {e.printStackTrace();}finally {CloseStream.close(bw);CloseStream.close(br);}}
}

​ 桥接器:字节流转换成字符流(InputStreamReader)

import java.io.InputStreamReader;
import java.util.Scanner;public class TestScanner {public static void main(String[] args) {//·键盘录入Scanner scan = new Scanner(System.in);//·in 是一个字节输入流//·传入一个字节流给这个桥接器变成一个字符流InputStreamReader rd = new InputStreamReader(System.in);}
}

*使用IO流时的编码问题:使用getBytes()方法进行编码,用String(str, “编码方式”)

import java.io.UnsupportedEncodingException;public class TestEncoding {public static void main(String[] args) throws UnsupportedEncodingException {String s1 = "你好世界";//·UTF-8文本转二进制。编码byte[] b = s1.getBytes("UTF-8");//·二进制转UTF-8文本。解码String s2 = new String(b, "UTF-8");System.out.println(s2);}
}

*序列化:

 package com.qianfeng.pre.demo1;import java.io.*;import com.qianfeng.am.CloseStream;/*** @author 吴一凡*   将数据写入文件,而不是文本。*/
public class TestObjectStream {public static void main(String[] args) throws Exception{OutputStream os = new FileOutputStream("Files\\object.txt");ObjectOutputStream oos = new ObjectOutputStream(os);//·将该对象写入文件。oos.writeObject(new Student("张三", 6, new Adrress("安徽","2310000")));oos.writeObject(new Student("李四", 7, new Adrress("安徽","2310000")));oos.writeObject(new Student("王五", 8, new Adrress("安徽","2310000")));oos.writeObject(new Student("赵六", 9, new Adrress("安徽","2310000")));oos.close();InputStream is = new FileInputStream("Files\\object.txt");ObjectInputStream ois = new ObjectInputStream(is);while (true) {//·读取数据try {Student stu = (Student) ois.readObject();System.out.println(stu);} catch (EOFException e) {break;}finally {//·在关闭被包装的流时,只需要关闭最外层的包装流,里面的自动关闭CloseStream.close(ois);CloseStream.close(os);}}}
}/*** @author 吴一凡* 序列化;*    必须实现serializable接口* 序列化一个对象时,必须保证对象的所有属性都是可序列化的* transient修饰为临时属性,不会被序列化* 读取到文件的尾部标志:java.io.EOFException*/
class Student implements Serializable{String name;Integer age;Adrress addr;public Student() {}public Student(String name, Integer age, Adrress addr) {super();this.name = name;this.age = age;this.addr = addr;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", addr=" + addr + "]";}
}class Adrress implements Serializable{//·transient String position;String zipCode;public Adrress() {}public Adrress(String position, String zipCode) {super();this.position = position;this.zipCode = zipCode;}@Overridepublic String toString() {return "Adrress [position=" + position + ", zipCode=" + zipCode + "]";}
}

千峰java逆战班Day31相关推荐

  1. 千峰JAVA逆战班Day49

    Day49 *下载文件案例:就是使用IO传输数据 private String resourceLocation = "D:\\Users\\t\\nginx-1.17.2\\html\\a ...

  2. 千峰JAVA逆战班Day35

    Day35 *注解:就是给代码中的方法,属性,参数等贴上了一个标签 注解的定义:@interface 注解名字 public @interface MyAnno{} 用法:在你想要贴上注解的地方的前面 ...

  3. 千峰JAVA逆战班Day38

    Day38 *连接查询:必须是两个或以上表之间且一定有主外键关系,才能进行连接查询 ​ I. 内连接:inner join on SELECT bid,bname,bprice,book.`tid`, ...

  4. 千峰JAVA逆战班Day40

    Day40 *对执行DQL的方法进行封装 ​ I. 连接,设置参数等方式跟封装DML是一样的,但是DQL返回的是一个结果集,所以需要对这个结果集进行处理.那么怎么处理呢?自然是封装到一个集合当中进行返 ...

  5. 千峰JAVA逆战班Day47

    Day47 *服务器的请求流程: *请求的方式:get 和 post,请求分为请求头和请求体 ​ I. get 请求的信息会直接显示在网页的地址栏. ​ II. post 请求的信息不会直接显示在网页 ...

  6. 千峰JAVA逆战班Day36

    Day36 *二阶段介绍:通过前端网页,将我们后台写的逻辑代码和数据,去供别人使用 *数据库(有服务端和客户端 ): ​ I. 可以用txt等文件存储,为什么还需要数据库? ​ 因为使用数据库存储会更 ...

  7. 千峰JAVA逆战班Day48

    Day48 *在昨天的注册案例上加一个功能:用户注册之后,给用户返回一个html页面,告知用户注册成功,且有用户的所有信息(必须是中文) ​ I. 如果需要有中文,那么中文乱码问题肯定是要考虑的:所以 ...

  8. 千峰JAVA逆战班Day37

    Day37 *DQL语句(数据库查询语句) I. 关系型数据库:表与表之间可以建立关系:称之为主外键. ​ 主键:在一个表中可以唯一标识一条记录,不能重复,不可为空. ​ 外键:当前表中的外键指的是另 ...

  9. 字节跳动面试官:千峰java培训多少钱

    并发编程三大特性 原子性 一个操作或者多次操作,要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行. 对于基本数据类型的访问,读写都是原子性的[long和 ...

  10. 千峰java 笔记整理_千锋--多线程笔记

    进程:正在运行的程序 多线程处于宏观上的并行/微观上的串行状态 第一种实现多线程的方法: 新增类继承Thread 重写run方法 在测试类中创建子对象调用start()方法启动该子线程 第二种实现多线 ...

最新文章

  1. html用JQuery自定义表单验证。
  2. iphonex黑屏开不了机_iphonexr黑屏,iphonexr突然开不了机
  3. 记得【黑镜】中的Whac-A-Mole游戏吗?HoloLens实现了!
  4. ecshop 后台添加评论_如何提升外卖营业额?评论回复不可忽视
  5. boost::mp11::mp_map_replace相关用法的测试程序
  6. jqgrid treegrid 重新加载数据
  7. jquery 设置style:display 其实很方便的哦
  8. c c 语言编程项目实例,实例分享cmake编译一个简单c++项目(demo)
  9. JVM 垃圾回收算法机制及其实现原理
  10. 缺陷管理规范--bug管理流程
  11. c++类的嵌套(1)
  12. 腾讯地图获取经纬度 Java计算距离工具类
  13. 5G网络架构 — 接入网/传输网/核心网
  14. php不使用第三变量互换,总结PHP不用第三个变量交换两个变量的值的几种方法
  15. 音视频 | 音视频学习-01
  16. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
  17. 人工智能的顶会有哪些
  18. CANoe编程实现FOTA车端的自动化测试(一)
  19. 【Substance】Substance Painter基本制作流程
  20. 专为Oracle数据恢复而生 - PRM

热门文章

  1. ECDSA私钥der格式
  2. 手机开热点但是电脑一直连接不上_iPhone手机热点明明打开了,可是电脑就是连不上怎么办?...
  3. TortoiseSVN配置
  4. 游戏音效中竟然有3D音效,这是什么鬼?
  5. TortoiseSVN 打Tags
  6. [BZOJ1864][CODEVS2462]三色二叉树
  7. 音乐鉴赏 周海宏 网络课程 题库(Ctrl+f查找)点赞哦
  8. CSS基础常识问答(四)
  9. window 10 金蝶KIS SPR32X30.OCX不能正确注册
  10. Java加密套件强度限制引起的SSL handshake_failure