Java学习第十七天

1.字节流:

FileInputStream(字节输入流)
特有方法:
FileInputStream fis = new FileInputStream("temp.txt");
1.int num = fis.available();//返回文件的字节总个数
2.fis.read()//返回int型数字,如果没有读到字节,返回-1

 1 //使用byte数组进行优化
 2 public static void m3()throws IOException
 3 {
 4 
 5 FileInputStream fis = new FileInputStream("temp.txt");
 6 
 7 byte[] arr=new byte[10];
 8 int len=0;
 9 while((len=fis.read(arr))!=-1){
10 
11 System.out.print(new String(arr,0,len));
12 }
13 
14 fis.close();
15 
16 
17 }

 

 1 //使用字节流读取文件:一次对一个字节
 2 public static void m2()throws IOException
 3 {
 4 FileInputStream fis = new FileInputStream("temp.txt");
 5 
 6 int num;
 7 while((num=fis.read())!=-1){
 8 
 9 System.out.print((char)num);
10 }
11 
12 fis.close();
13 
14 }

2.FileOutputStream(字节输出流)

方法:
FileOutputStream fos = new FileOutputStream("temp.txt");

fos.write("abc".getBytes());//byte[] getBytes() 编码
注意:1.在输出时,要在每一次输入结束后都要进行flush(),如果不刷新,则不会输出
   2.在程序结尾都要close(),关闭文件,并且close()默认自动刷新


3.字节缓冲流:BufferedInputStream BufferedOutputStream
  这几个方法都会抛出异常。

 1 例:
 2 import java.io.*;
 3 class Demo4 
 4 {
 5 public static void main(String[] args) 
 6 {
 7 //字节缓冲流:BufferedInputStream BufferedOutputStream
 8 
 9 //复制图片
10 BufferedInputStream bis = null;
11 BufferedOutputStream bos = null;
12 
13 try{
14 
15 bis = new BufferedInputStream(new FileInputStream("tou1.jpg"));
16 bos = new BufferedOutputStream(new FileOutputStream("tou1_copy.jpg"));
17 
18 byte[] arr=new byte[1024];
19 int len=0;
20 while((len=bis.read(arr))!=-1){
21 
22 bos.write(arr,0,len);
23 }
24 
25 }catch(IOException e){
26 e.printStackTrace();
27 }finally{
28 
29 if(bis!=null)
30 try{
31 bis.close();
32 }catch(IOException e){
33 throw new RuntimeException("字节缓冲读取流关闭失败");
34 }
35 
36 if(bos!=null)
37 try{
38 bos.close();
39 }catch(IOException e){
40 throw new RuntimeException("字节缓冲输出流关闭失败");
41 }
42 }
43 
44 }
45 }

 

4.标准输入(和键盘关联):System.in(in是一个字节输入流对象(默认关联的设备是键盘))
  //int m = kk.read();//从键盘读数据 阻塞式方法,只要不输入,会一直等待
  //System.out.print((char)m);
  标准输出(已经和控制台设备关联)System.out;(out是一个字节输出流对象(默认关联的设备是控制台))//是一个字节输出流对象


  使用System.in实现键盘输入,太麻烦
  System.in实现键盘输入的代码类似于BufferedReader的一次读一行功能的代码(readLine())
  System.in ----字节读取流

  BufferedReader---- 字符读取流

5.转换流:

InputStreamReader:是从字节流到字符流的桥
InputStreamReader(InputStream in)
OutputStreamWriter :OutputStreamWriter(OutputStream out)

 

 1 例:
 2 class Demo6 
 3 {
 4 public static void main(String[] args) throws IOException
 5 {
 6 //定义标准的键盘字节输入流对象,或者定义FileInputStream()对象
 7 InputStream in=System.in;
 8 
 9 //使用转换流把字节流转成字符流
10 InputStreamReader isr = new InputStreamReader(in);
11 
12 //使用字符缓冲流
13 BufferedReader br = new BufferedReader(isr);
14 
15  
16 
17 //定义标准的字节输出流对象,或者定义FileOutputStream()对象
18 PrintStream out = System.out;//是一个字节输出流对象(已经和控制台设备关联了)
19 
20 //把字节输出流转成字符输出流
21 OutputStreamWriter osw = new OutputStreamWriter(out);
22 
23 //使用字符缓冲流
24 BufferedWriter bw = new BufferedWriter(osw);
25 
26 
27 String line = null; //从键盘读不到结束标志
28 while((line=br.readLine())!=null){
29 if("over".equals(line))
30 break;
31 bw.write(line);
32 bw.newLine();
33 // bw.flush();
34 //System.out.println(line);//字节流
35 }
36 
37 
38 br.close();
39 bw.close();
40 
41 }
42 }

6.File:java把路径或文件面向对象

实例化对象:
//1.把文件或文件夹封装成File类型的对象
File file=new File("E:\\java练习\\day17练习\\tt.txt");
//2.适合文件名变化的
File file=new File("E:\\java练习\\day17练习","tt.txt");
//3.分开定义
File ff=new File("E:\\java练习\\day17练习");
File file=new File(ff,"tt.txt");

方法:
getName()//得到文件名
getPath()//得到路径,定义的是相对的则得到相对的,定义的绝对的获取绝对的
getParent()//返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
getAbsolutePath()//得到绝对路径
lastModified()//获取文件最后的修改时间
delete()//删除文件或文件夹
listRoots()//得到根目录(得到系统盘)
list()//得到某个目录下的所有文件和文件夹的名字返回的是String[]
listFile()//返回File[] 把某个目录下的所有文件和文件夹都封装成File的对象
listFile(FilenameFilter filter)


7.递归:函数自己调用自己,当调用次数太多时,会内存溢出,所有要注意,调用次数不要太多
    注意:要有调用的结束条件

8.PrintStream:字节打印流,继承了OutputStream,字节输出流的功能都具备,增加了打印的功能

向哪些设备输出(目的):
1: File类型的文件
2:OutputStream类型的字节输出流
3:字符串类型的文件名
例:ps.write(353);// 00000000 00000000 00000001 01100001---》砍掉前三个字节 01100001


9.父类是Writer
  PrintWriter:字符打印流,字符输出流的基本功能都具备,增加了打印功能
    向哪些设备输出(目的):
    1:File类型的文件
    2:字节输出流对象
    3:字符输出流对象
    4:字符串类型的文件名

 1 例:
 2 
 3 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 4 
 5 // BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 6 
 7 PrintWriter pw = new PrintWriter(System.out,true);//加上第二个参数,则会自动刷新
 8 
 9 String line = null;
10 while((line=br.readLine())!=null){
11 if("over".equals(line))
12 break;
13 pw.println(line);//会输出换行
14 //pw.write(line);
15 // pw.flush();
16 }

 

posted on 2019-08-25 22:37  small_slag  阅读(203)  评论(0编辑  收藏  举报

导航