JAVA自学笔记22
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"));//实现复制文件
JAVA自学笔记22的更多相关文章
- JAVA自学笔记06
JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...
- JAVA自学笔记18
JAVA自学笔记18 1.Map接口: 1)功能: 2) Map<String,String>m=new HashMap<String,String>(); //添加元素,元素 ...
- JAVA自学笔记09
JAVA自学笔记09 1.子类的方法会把父类的同名方法覆盖(重写) 2.final: 1)可修饰类.方法.变量 2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承 3)修饰方法时:该方法将无法 ...
- JAVA自学笔记05
JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...
- JAVA自学笔记04
JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...
- JAVA自学笔记07
JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...
- JAVA自学笔记10
JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...
- JAVA自学笔记13
JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...
- JAVA自学笔记11
JAVA自学笔记11 1:Eclipse的安装 2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字 A:创建项目 B:在src目录下创建包.cn.itcast C:在cn.i ...
随机推荐
- Bootstraptable源码
// @author 文志新 http://jsfiddle.net/wenyi/47nz7ez9/3/ /**关于插件的通用构造 * * 构造函数PluginName($trigger,option ...
- input时间表单默认样式修改(input[type="date"])
一.时间选择的种类: HTML代码:选择日期:<input type="date" value="2018-11-15" /> 选择时间:<i ...
- 008 RestFul API 拦截器
一:任务 1.任务 过滤器Filter 拦截器Interceptor 切片Aspect 二:过滤器 1.新建包 2.自定义过滤器程序 加了注解,这个过滤器在springboot中就起作用了 packa ...
- 基于TensorFlow的MNIST数据集的实验
一.MNIST实验内容 MNIST的实验比较简单,可以直接通过下面的程序加上程序上的部分注释就能很好的理解了,后面在完善具体的相关的数学理论知识,先记录在这里: 代码如下所示: import tens ...
- DDoS攻击与防御(2)
2.攻击系统资源终端设备在与服务器进行通信时,经常需要创建会话连接,在此过程中通常会使用TCP和SSL等协议.会话连接一旦被占满,新进入的会话请求就必须等待前面的会话完成.消耗系统资源的DDoS攻击的 ...
- HDU 3415 Max Sum of Max-K-sub-sequence【单调队列】
<题目链接> 题目大意: 给你一段从1~N的圆形序列,要你求出这段圆形序列中长度不超过K的最大连续子序列之和是多少,并且输出这子序列的起点和终点. 解题分析: 既然是求连续子序列之和,我们 ...
- Stm32串口通信(USART)
Stm32串口通信(UART) 串口通信的分类 串口通信三种传递方式 串口通信的通信方式 串行通信的方式: 异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束.其每帧的格式如下: 在一帧格 ...
- asp.net core 上使用redis探索(3)--redis示例demo
由于是基于.net-core平台,所以,我们最好是基于IDistributedCache接口来实现.ASP.NET-CORE下的官方redis客户端实现是基于StackExchange的.但是官方提供 ...
- LanProxy 内网映射穿透
前言:用过 ngrok 的人都知道,这是一个免费并且简便的内网映射工具,可是现在ngrok不知道弄啥?不能用了,那我们只能去找一些新的工具,下面是我跟我朋友一起弄的(主要是他教我(✪ω✪)),免费的, ...
- Linux系统模式之间的转换
1.默认开机进入文本模式 如果想让开机自动进纯文本模式, 修改/etc/inittab 找到其中的 id:5:initdefault: 这行指示启动时的运行级是5,也就是图形模式 改成3就是文本模式了 ...