IO流笔记

来源:互联网 发布:人工智能计算器 iphone 编辑:程序博客网 时间:2024/05/29 16:16
字节输入流: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);
 
 }

}


}