JAVA自学笔记22

1、操作基本数据类型的流
DataInputStream
DataOutputStream
数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。

//实例
private static void write(){
DataOutputStream dos-new DataOutputStream(new FileOutputStream("dos.txt"));dos.writeByte(10);
dos.writeShort(100);dos.cllose();
}
private static void read(){
DataInputStream dis=new DataOutputStream(new FileInputStream("dos.txt")
);
byte b=dis.readByte();
short s=dis.readShort();dis.cose();
System.out.println(b);
System.out.println(s);
}

2、内存操作流
-操作字节数组
ByteArrayInputStream
包含一个内部缓冲区,该缓冲区包含从流中读取的字节。
ByteArrayOutputStream
此类实现一个输出流,其中的数据被写入一个byte数组,缓冲区会随着数据的不断写入而自动增长。无法关闭该流。

ByteArrayOutputStream baos=new ByteArrayOutputStream();
for(int x=0;x<10;x++){
baos.write(("hello"+x).getBytes());
}
byte[] bys=baos.toByteArray();ByteArrayInputStream bais=new ByteArrayInputStream(bys);
int by=0;
while((by=bais.read())!=-1){
System.out.println((char)by);
}baos.close();

-操作字符数组
CharArrayReader
CharArrayWrite
-操作字符串
StringReader
StringWriter

3、打印流
1)分类:
字节打印流
字符打印流
2)特点:
只能操作目的地,不能操作数据
可以操作任意类型的数据
如果启动了自动刷新,就能够自动刷新
可以操作文件的流
只能写,不能读
注:能直接操作文本文件的有:
FileInputStream
FileOuputStream
FileReader
FileWriter
PrintStream
PrintWriter
流分为基本流和高级流。基本流是能直接读写文件的,高级流是在基本流的基础上提供了一些其他的功能。查看API,看流对象的构造方法,如果同时有File类型和String类型的参数,一般来说都是可以直接操作文件的。

作为Writer的子类使用PrintWriter pw-new PrintWriter("pw.txt");
pw.write("good");
pw.write("wood");pw.close();
//实现自动刷新和换行
PrintWriter pw=new PrintWriter(new FileWriter("pw2.txt"),true);
//启动自动刷新,但对print()无效
pw.println(true);
pw.println(100);
//这里的println等价于
bw.write()
bw.newLine()
bw.flush()
打印流改进复制文本文件
//封装数据源
BufferedReader br=new BufferedReader(new FileReader("DataStreamDemo.java"));
//封装目的地
PrintWriter pw=new PrintWriter(new FileWriter("copy.java",true));
String line=null;
while((line=br,readLine())!=null){
pw.println(line);
}
pw.close();
br.close();

3)标准输入输出流
System类中的字段:in,out
public static final InputStream in “标准”输入流
public static final PrintStream out
“标准”输出流
它们各代表了系统标准的输入和输出设备。默认输入设备是键盘,输出设备是显示器。System.in的类型是InputStream.System.out的类型是PrintStream

//输出语句的本质
System.out.println("Hello");
//等价于
PrintStream ps=System.out;
ps.println("helloworld");

//三种方式实现键盘录入

//获取标准输入流
InputStream is=System.in;
//一次获取一行数据
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
//或
//BufferedReader br=new BufferedReader(new InputStreamReader(System.in));String line=br.readLine();
System.out.printlb("please input words");
String line=br.readLine();
System.out.println(line);
//输出语句用字符串缓冲流改进
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out);
bw.write("hello");
bw.flush();
bw.close();

6、
1)序列化流
ObjectOutputStream
将Java对象的基本数据类型和图形写入OutputStream.把对象按照流一样的方式存入文本文件或者在网络中传输
2)反序列化流
ObjectInputStream
把文本文件中的流对象或者网路中的流对象数据还原成对象

//Person类略(Implements Serializable)//序列化数据的方法,必须通过实现序列化接口以启动序列化功能。该接口没有任何方法,类似于这种没有方法的接口被称为标记接口,在类名后声明即可。这时将一个标记值存入该类中,一旦该类成员发生变化,该标记值也会发生变化。因此直接读取将发生id不匹配的错误,要重新写过才行。或者将该id值固定,点击黄色警告线即可Add default serial version id/add genreated serial version id。之后再直接进行读取无问题。
private ststic void write(){
ObjectOutputStream cos=new ObjectOutputStream(new FileOutputStream("cos.txt"));Person p=new Person("cc");oos.writeObject(p);oos.close();
}
//反序列化方法
private static void read()
{
//创建反序列化对象
ObjectInputStream ois=new ObjextInputStream(new FileInputStream("oos.txt"));//还原对象
Object obj=ois.readObject();ois.close();
}

3)如何让对象不被序列化?
同一个类中有很多成员,有些不想被序列化。这时可以使用transient关键字声明不需要序列化的成员变量。可以与IO流结合来使用。Hashtable的子类,说明是一个Map集合

7、Properties集合
1)表示一个持久的属性集。Prooerties可保存在流中或从流中加载,属性列表中每个键及其对应值都是一个字符串。
2)构造方法
无参:没有泛型
Properties prop=new Properties();
prop.put(key,value);

//添加元素:
prop.put("001","cc");
prop.put("002","dc");
prop.put("003","ac");
//遍历集合
Set<Object>set=.prop.keySet();
for(Object key:set){
Object value=prop.get(key);
}

3)特殊功能
public Object Property(String key,String value)
添加元素
public Object getProperty(String key)
获取元素
public Set stringPropertyNames()
获取所有的键的集合

Properties prop=new Propertiess();prop.setProperty("ww","12");
prop.setProperty("we","12");
prop.setProperty("wq","13");Set<String>set=prop.stringPropertyNames()
for(String key:set){
String value=prop.getProperty(key)
};//获取所有键的集合

必须是Properties集合,文件的形式必须是键值对的形式
public void load(Reader reader)
把文件的数据读取到集合中
public void store(Writer writer,String commments)
把集合中的数据存储到文件

Properties prop=new Properties();//将文件中的数据读入到集合中
Reader r=new FileReader("prop.txt");
prop.load(r);
r.close();
System.out.println("prop:"+prop);//写数据
Properties prop=new Properties();
prop.setProperty("ww","3");
prop.setProperty("w3","5");
prop.setProperty("w2","6");Writer w=new FileWriter("name.txt");
prop.store(w,"men");

@例题1:判断文件中是否有指定的键,如果有就把其值改为100
-把文件中的数据加载到集合中
-遍历集合,获得每一个键
-判断是否有Lisi,如果有就修改值为100
-把集合中的数据重新存储到文件中

//把文件中的数据加载到集合中
Properties prop=new Properties();
Reader r=new FileReader("user.txt");
prop.load(r);
r.close();//遍历集合,得到每一个值
Set<String>set=prop.stringPropertyNames();
for(String key:set){
if("lisi".equals(key)){
if("lisi".equals(key)){
prop.setProperty(key,"100");
break;
}
}
//将集合中的数据重新存储到文件中
Writer w=new FileWriter("user.txt");
prop.store(w,null);
w.close();
}
//只能玩5次的猜数字游戏
//猜数字方法GuessNumber.start();
//把数据加载到集合中
Properties prop=new Properties();
Reader=new FileReader("count.txt");
prop.load(r);
r.close();String value=prop.getProperty("count");
int number=Integer.parseInt(value);
if(number>5)
{
System.out.println("请付费");
System.exit(0);
}
else{
number++;
prop.setProperty("count",String.valurOf(number));
Wwrite w=new FileWriter("count.txt");
prop.store(w,null);
w.close();
GuessNumber.start();
}

4、NIO包下的IO流
1)NIO即新IO的意思

Path:路径
Paths:有一个静态方法返回一个路径
public static Path get(URI uri)
Files:提供了静态方法供使用
public static long copy(Path source,OutputStream out)

Files.copy(Paths.get("ByteArrayStreamDemo.java"),new FileOutputStream("Copy.java"));//实现复制文件

转载于:https://www.cnblogs.com/Tanqurey/p/10485331.html

JAVA自学笔记22相关推荐

  1. JAVA自学笔记07

    JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...

  2. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  3. JAVA自学笔记21

    JAVA自学笔记21 1.转换流 由于字节流操作中文不是非常方便,因此java提供了转换流 字符流=字节流+编码表 1)编码表 由字符及其对应的数值组成的一张表 图解: 2)String类的编码和解码 ...

  4. JAVA自学笔记08

    JAVA自学笔记08 1.构造方法私有,外界就不能再创建对象 2.说明书的制作过程 1)写一个工具类,在同一文件夹下,测试类需要用到工具类,系统将自动编译工具类:工具类的成员方法一般是静态的,因此在测 ...

  5. JAVA自学笔记25

    JAVA自学笔记25 1.GUI 1)图形用户接口,以图形的方式,来显示计算机操作的界面,更方便更直观 2)CLI 命令行用户接口,就是常见的Dos,操作不直观 3) 类Dimension 类内封装单 ...

  6. JAVA自学笔记23

    JAVA自学笔记23 1.多线程 1)引入: 2)进程 是正在运行的程序.是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 多进程: 单进程的计算机只能做一件事情,而现在 ...

  7. Java学习笔记22:并发(2)

    Java学习笔记22:并发(2) 图源:PHP中文网 终止任务 终止线程有一种非常简单的方式:设置一个多线程共享的标记位,子线程用轮询的方式检查这个标记位,如果该标记位显示取消状态,就让子线程退出执行 ...

  8. Java自学笔记——Java面向对象——04.抽象类、接口、内部类

    Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...

  9. 廖雪峰Java自学笔记------Java简洁

    廖雪峰Java自学笔记------Java简洁 这是专门针对小白的零基础Java教程. 为什么要学Java? 因为Java是全球排名第一的编程语言,Java工程师也是市场需求最大的软件工程师,选择Ja ...

最新文章

  1. 一次excel的countifs的成功应用
  2. AI开放只是幌子?科技巨头边承诺开放边申请专利
  3. instanceof 的作用
  4. 去掉状态条并全屏_一个人住180㎡,大大的落地窗,足够的收纳,简洁又舒适,宅在家是她最享受的状态!...
  5. 如何在AWS EC2实例上部署Spring Boot应用程序
  6. coreData mapView #include
  7. jupyter 功能插件
  8. 超20GB显存怪兽!RTX 30或于9月9日发布,AMD蓄力卡皇之争
  9. 电脑录制网课视频怎么操作?
  10. YOLOv4中常见CV学术名词说明(三){CSP/WRC/SAT}
  11. 数论学习笔记之解线性方程 a*x + b*y = gcd(a,b)
  12. 微信公众号基础04_分享和录音功能的实现
  13. 10度角的三角函数计算(续)
  14. 天平游码读数例题_2019使用天平游码时的读数方法语文
  15. 零基础学 Python 有什么建议?
  16. 便签插件可以贴在手机桌面上显示吗?怎么设置呢?
  17. 搜狗输入法 android 历史版本,搜狗输入法老版本下载
  18. 创建一个Student的类,输出姓名,学号,性别,语文数学英语成绩,并求和,求平均数
  19. 内核proc参数注释(kernel、vm、net、fs四类)
  20. springboot集成netty实现代理服务器

热门文章

  1. mysql数据库、表、索引、触发器
  2. “GIS讲堂”第二课内容的公布
  3. 自定义浏览器协议,实现web程序调用本地程序
  4. [转]SQL Server 索引基础知识(2)----聚集索引,非聚集索引
  5. python哪个关键字可以导入模块_关于python导入模块import与常见的模块详解
  6. gitee最多上传多大文件_H5移动端图片压缩上传,基于Jquery的前端,实现拍照上传,选择相册
  7. opencv 图像 抠图 算法_人工智能 | 不用绿幕也能实时抠图,商汤等提出只需单张图像、单个模型的新方法MODNet...
  8. write up杂项:想蹭网先解开密码
  9. linux如何修改网卡序号,CentOS双网卡时改变网卡编号和配置静态路由的方法
  10. 企业上云的数据库演进之路