字节输入流:FileInputStream
一般开发步骤:
一次读取一个字节
1:创建字节文件输入流对象 FileInputStream fis=new FileInputStream(a.txt);
2:读数据:int by=0;
while((by=fis.read())!=-1;){
System.out.println((char(by));
}
3:释放资源 fis.close();
一次读取一个字符数组 public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("a.txt");
byte[] bys=new byte[1024];
int len=0;
while((len=fis.read(bys))!=-1){
System.out.println(new String(bys,0,len));
}
}
}
Copy 可以使用字节输入流或者字符输入流
1:封装数据源
2:封装目的地
3读取
4释放资源
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileOutputStream;
public class test1 {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("a.txt");
FileOutputStream fos=new FileOutputStream("b.txt");
byte[] bys =new byte[1024];
int len=0;
while((len=fis.read(bys))!=-1){
fos.write(bys,0,len);
}
fis.close();
fos.close();
}
}
字符缓冲输入流:BufferedInputStream
1:一次读取一个字节
2:一次读取一个字符数组;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class test2 {
public static void main(String[] args) throws IOException {
BufferedInputStream bis =new BufferedInputStream(new FileInputStream("a.txt"));
byte[] bys=new byte[1024];
int len=0;
while((len=bis.read(bys))!=-1){
System.out.println(new String(bys,0,len));
}
bis.close();
}
}
为什么字节缓冲流不能够直接针对文件进行操作?
因为缓冲流只提供一个缓冲区,底层还是通过IO来实现数据的传输
flush()和close()的区别
flush()刷新缓冲区的流,强迫字节写入,刷新之后可以继续写入数据;
close()关闭流对象所指向的文件,一旦关闭,不能写入数据;
将字符串转换为字符数组;
package wbb1;
import java.util.Arrays;
public class test4 {
public static void main(String[] args) {
String s="细化";
byte[] bytes = s.getBytes();
System.out.println(Arrays.toString(bytes));
}
}
对于视频,音频,图片等文件,优先选择字符缓冲流传输(高效流)一次传输一个字符数组
用时:基本字节流>字节缓冲流>基本字符数组流>字符数组缓冲流
字符转换输入流 InputStreamReader->FileReader
字符转换输出流 OutputStreamWriter-> FileWriter
BufferRead br=new BufferedRead(new FileReader(“a.txt”))
使用递归的前提
1:定义一个方法
2:有规律
3:要有出口条件
package wbb1;
public class test6 {
public static void main(String[] args) {
int[] arr= new int[20];
arr[0]=1;
arr[1]=1;
for(int i=2;i<arr.length;i++){
arr[i]=arr[i-1]+arr[i-2];
}
System.out.println(arr[19]);
System.out.println(fib(20));
}
private static int fib(int n) {
if(n==1||n==2){
return 1;
}else{
return fib(n-1)+fib(n-2);
}
}}
DateInputStream和DateOutputStream都属于数据流,都可以对基本数据流进行操作
DateInputStream dis=new DateInputStream(new FileInputStream("a.txt"))
package wbb1;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
内存操作流:ByteArrayOutputStream和ByteArrayInputStream
特点:针对内存操作小文件,程序一结束,这些内存中的数据就消失了。
public class test7 {
public static void main(String[] args) {
ByteArrayOutputStream bos=new ByteArrayOutputStream();
for(int i=1;i<5;i++){
System.out.println(("学习"+i).getBytes());
}
byte[] bys=bos.toByteArray();
ByteArrayInputStream bas = new ByteArrayInputStream(bys);
int by=0;
while((by=bas.read())!=-1){
System.out.println((char)by);
}
}}
打印流:字节打印流:PrintStream
字符打印流:PrintWriter 有自动刷新功能
字节打印流只能操作目标数据,不能直接操作数据源
package wbb1;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class test8 {
public static void main(String[] args) throws IOException {
PrintWriter pw=new PrintWriter(new FileWriter("c.txt",true));
pw.print("wo");
pw.print("ai");
pw.print("ni");
pw.close();
}
}
键盘录入的两种方式,
1:Scanner
Scanner sc=new Scanner(System.in);
2: IO流
BufferedReader br=new BufferedReader( new InputStreamReader(System.in))
SequenceInputStream 合并流
只能操作数据源不能操作目标数据
package wbb1;
import java.io.FileInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.SequenceInputStream;
public class test10 {
public static void main(String[] args) throws IOException {
InputStream i=new FileInputStream("a.txt");
InputStream j=new FileInputStream("aa.txt");
SequenceInputStream sis=new SequenceInputStream(i,j);
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("copy.txt"));
byte[] bys =new byte[1024];
int len=0;
while((len=sis.read(bys))!=-1){
bos.write(bys,0,len);
bos.flush();
}
sis.close();
bos.close();
}
}
序列化流:将对象像流的方式或者网络传输中的数据写数据.对象---->流数据:ObjectOutputStream
反序列化:将流数据或者网络传输中的流数据读取出来.流数据---->还原成对象:ObjectInputStream
Properties:属性集合类,该类继承自Hashtable<K,V>,该类属于Map集合
有自己的添加元素和遍历元素方法
添加元素 setProperty()
遍历元素 StringPropertyNames();
package wbb1;
import java.util.Properties;
import java.util.Set;
public class test11 {
public static void main(String[] args) {
Properties pp=new Properties();
pp.setProperty("吴蹦蹦","23");
pp.setProperty("杨", "21");
Set<String> set = pp.stringPropertyNames();
for(String s :set){
String s1= pp.getProperty(s);
System.out.println(s+s1);
}
}
}
IO流笔记
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Java第三周作业(2)
課堂練習4: 編寫代碼模擬手機與SIM卡的組合關係。 要求: SIM卡類負責創建SIM卡; Phone類負責創建手機; 手機可以組合一個SIM卡;
Miss_You123123
2020-06-25 09:43:01
lesson8:集合框架作业2
搬运工、
2020-06-17 09:19:15
lesson7:gui: 编写一个JFrame窗口
代碼:import java.awt.BorderLayout; import java.awt.FlowLayout; import ja
搬运工、
2020-06-17 09:19:15
lesson 11:使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。
搬运工、
2020-06-17 09:19:15
作业3:求1+2!+3!+...+20!的和
搬运工、
2020-06-17 09:19:15
作业4: 求一个n阶方阵对角线元素之和。
搬运工、
2020-06-17 09:19:15
lesson 6:写一个方法void triangle(int a,int b,int c),判断三个参数是否能构成一个三角形。
題目: 寫一個方法void triangle(int a,int b,int c),判斷三個參數是否能構成一個三角形。如果不能則拋出異常Illega
搬运工、
2020-06-17 09:19:15
上课内容及作业。File类的常用方法的使用、递归遍历目录及其子目录下的文件、使用delete()方法删除目录
qq_45766098
2020-05-21 20:51:56
Java初学者作业——编写JAVA程序,要求输入技术部门5位员工的理论成绩和实操成绩,计算并输出各位员工的最终评测成绩。
明金同学
2020-03-12 10:08:53
Java初学者作业——编写JAVA程序,在控制台中输入六位员工的姓名,通过随机点名方式,输出当选组长的员工姓名。
明金同学
2020-03-12 10:08:53
Java初学者作业——为某超市设计管理系统,需要在控制台展示系统菜单,菜单之间可以完成跳转。
明金同学
2020-03-12 10:08:53
Java初学者作业——编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级。定义方法实现学生成绩的评测功能。
明金同学
2020-03-12 10:08:53
Java初学者作业——定义英雄类(Hero),英雄类中的属性包括:姓名、攻击力、防御力、生命值和魔法值;方法包括:攻击、介绍。
明金同学
2020-03-06 12:59:12
Java初学者作业——完成对已定义类(Admin)的对象的创建。并完成属性的赋值和方法的调用。
明金同学
2020-03-06 12:59:12
Java初学者作业——定义管理员类(Admin),管理员类中的属性包括:姓名、账号、密码、电话;方法包括:登录、显示自己的信息。
明金同学
2020-03-06 12:59:12