黑马程序员_java基础笔记第八天

来源:互联网 发布:虚拟专用网络服务器 编辑:程序博客网 时间:2024/06/01 07:16

 

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一 IO流
 1 定义
  1 用于处理设备间的数据传输。
  2 按类型分为两中字节流,字符流。
  3 按流向分为两种输出流输入流。
 
二 字符流:
 1 定义:
  1 凡是能用记事本打开能多懂得文件都可以用字符流。
  2 用于操作文本文件。
  3 大体分为读取流Reader,写入流Writer.

 2 Reader常见方法:
  1 read()
   一次多去以个字符。
  2 read(char[] arr )
   一次都取数组长度的字符存储到数组中。
  3 close()
   关闭关联文件。
  
 3 Writer常见方法:
  1 write()
   将数据写入流中一次写以个字符也就是两个字节。

  2 write(char [] arr,int start,int end)
   将数组中有小数据写到流中。

  3 flush()
   将写入到流中的数据刷到文件中。

  4 close()
   将关联文件关闭。


三 字符流例题:
1 读取指定文件到屏幕上。
public class Test{
 public static void main(String[] args)throws IOException {
 Reader rea=new FileReader("Test.java");
    int ch=fr.read();
   
     while((ch=rea.read())!=-1)
    {
        System.out.println((char)ch);
    }
 rea.close();
}
}

2 复制文件:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
 public class Test{
  public static void main(String[] args) {
  Reader rea=null;
  Writer wri=null;
  try{
  rea=new FileReader("Test.java");
  wri=new FileWriter("Test1.javaq");
     int ch=rea.read();
      while((ch=rea.read())!=-1)
     {
         wri.write(ch);
  wri.flush();
     }}catch(IOException e)
     {
      e.printStackTrace();
     }
  finally{
   if(rea!=null)
   {
    try {
     rea.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   if(wri!=null)
   {
    try {
     wri.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }

 
 }
 
}

四 字节流:
 1 定义:
  1 字节流可以操作任意类型文件。
  2 大体分为InputStream,字节读取流,OutputStream季节写入流。

 2  InputStream常用方法:
  1 read()
   一次读取一个字节。

  2 read(byte[] b)
   一次读取数组长度的数据存到数组中。

  3 close()
   关闭相关联文件。

 3 OutPutStream常用方法:
  1 write(byte[] int start,int end)
   将数组内有效数据写到文件或控制台上。

  2 write()
   一次写入以个字节。
   
五 字节流练习:
1 复制图片

        FileOutputStream fw=null;
   FileInputStream fr=null;
   try {
    fos=new FileOutputStream("b.jpg");
    fis=new FileInputStream("a.jpg");
    byte[] buf=new byte[1024];
    int num=0;
    while ((num=fis.read(buf))!=-1){
    fis.write(buf,0,num);
    }
 }
   catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
   finally
  {
     try {
                      if(fis!=null)
    fis.close();
   } catch (IOException e) {
    
    e.printStackTrace();
   }  
     
     try {
    fos.close();
   } catch (IOException e) {
    
    e.printStackTrace();
   }  
  }

六 缓冲区流:
 1 定义:
  1 字节流字符流都有各自的缓冲区流。 
  2 是他们的包装类。
  3 也称为高效流,将读取来的,或写如的数据存起来,到一定数目一起传输过去。
 2 种类及方法的使用:
  1 BufferedWrite字符高效写入流。
    newLine()
    写入换行符任意平台都识别。
  2 BufferedReader字符高效读取流。
    readerLine();
    一次读取一行不读取换符。
    
  3 BufferedOutoutStream字节高效写入流。 

  4 BufferedInputStream字节高效读取流。
   available()
    获取数据的总长度。
 
七 高效流例题:
1 使用高效流复制mp3文件。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test6 {

 public static void main(String[] args) {
  
  copyFile("d:\\1.mp3", "1.mp3");
  
 }

 private static void copyFile(String target, String destination) {
 
 
  BufferedInputStream bin=null; 
  BufferedOutputStream bou=null;
  try{
  //建立读取缓冲流对象包装文件读取流对象
  bin=new BufferedInputStream(new FileInputStream(target));
  
  //建立写入缓冲流对象包装文件写入流对象
  bou=new BufferedOutputStream(new FileOutputStream(destination));
  
  //创建数组初始化为1024
  byte[] b=new byte[1024];
  int x=0;
  
  //每次读取数据存储到数组内,无数据返回-1
  while((x=bin.read(b))!=-1)
  {
   //将数组内的有效数据写入目的地文件内
   bou.write(b,0,x);
  
  }}
  catch(IOException e)
  {
   e.printStackTrace();
  }
  finally
  {
   //如果bin不为空关闭bin流对象,为空会空指针异常
   if(bin!=null)
   {
    try {
     bin.close();
    } catch (IOException e) {

     e.printStackTrace();
    }
   }
   
   //如果bou不为空关闭bou流对象,为空会空指针异常
   if(bou!=null)
   {
    try {
     bou.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }

  }
 }
}


2 自定义缓冲区。
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

class MyBufferedInputStream{
 private InputStream in;
 private byte[] buf =new byte[1024];
 private int pos;
 private int count;
 
 MyBufferedInputStream(InputStream in)
 {
  this.in=in;
 }

public int myRead()throws IOException{

 if(count==0)
 {
  count=in.read(buf);
  
  if(count<0)
   return -1;

  pos=0;
  byte b = buf[pos];
  pos++;
  count--;
  return b&255;

 }
 else if(count>0)
 {
  byte b = buf[pos];
  pos++;
  count--;
 return b&0xff;
 }
 return -1;
}

public void myClose()throws IOException
{
 in.close();
}
}

public class Test{
 
public static void main(String...args) throws IOException{
 long start = System.currentTimeMillis();
 copy();
 long end = System.currentTimeMillis();
 System.out.println(end-start);
}

public static void copy()throws IOException
{
MyBufferedInputStream bufis = new MyBufferedInputStream 
 (new FileInputStream("C:\\1.avi"));

BufferedOutputStream bufos = new BufferedOutputStream
 (new FileOutputStream("C:\\2.avi"));

 for(int len=0;(len=bufis.myRead())!=-1;)
  {
  bufos.write(len);
  }

 bufis.myClose();
 bufos.close();
 }

}

八 LineNumberReader
 1 定义:
  带有行号的缓冲区
2 例题读取文件带行数打印到控制台上。

import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;

public class bao {
public static void main(String[] args) throws IOException {
 FileReader fr=new FileReader ("a.txt");

 LineNumberReader lnfr=new LineNumberReader (fr);

 String line=null;
  while((line=lnfr.readLine())!=null)
  {
   String s=line;
   int num=lnfr.getLineNumber();
   System.out.println(num+":"+s);
  }

 lnfr.close();
}
}

九字符转换流OutputStreamWriter:
 1 定义
  1 将字符数据以字节的形式写出去。
  2 字符通向字节的桥梁。 
 2 字符转换流例题:
1 应用字符转换流录入输出到屏幕上
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

public class Test{
public static void main(String[] args) throws IOException {


 BufferedWriter bw=new BufferedWriter(
   new OutputStreamWriter(System.out));
 for(int x=0;x<5;x++)
 {
  bw.write(x+"");
 
 }
 
 bw.close();
}

十 字节转换流OutputStreamReader:
 1 定义
  
  1 字节通向字符的桥梁。 
 2 字符转换流例题:
1 读取键盘录入打印到控制台上:

public class Test {
 public static void main(String[] args) throws IOException {
  BufferedReader buff=new BufferedReader(new InputStreamReader(System.in));
   String str=null;
   while((str=buff.readLine())!=null)
   {
    System.out.println(str);
   }buff.close();
 }
}r.close;
}

十一 File类;
 1 定义:
  1 用来描述文件和文件夹的类。
 2 构造方法:
  构造方法摘要
   1 File(File parent, String child)
             根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
   2 File(String pathname)
             通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
   3 File(String parent, String child)
             根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
 3 常用方法:
  1 exists()
    判读文件时否存在。
  2 getAbsoluteFile()
   获取绝对路径。
  3 getName()
   获取文件的名字。
  4 getPath()
   将抽象路径转换为字符串。
  5 isDirectory()
   判断是不是文件夹。
  6 isFile
   判断是不是文件。
  7 list()
   返回一个目录下所有文件盒文件夹名的字符串表现形式。
  8 listFiles()
   返回该目录下的虽有文件和文件夹的对象。
  9 listFiles(FilenameFilter filter)
   返回给定要求的该目录下的虽有文件和文件夹的对象。
  10 delete()
   删除文件或文件夹。京剧界
十二 File例题:
1 打印指定目录下满足.java格式的锁有文件。

import java.io.File;
import java.io.FilenameFilter;

public class Test{
public static void main(String[] args) {
 File[] f=show(new File("e:\\day"));
 for(File ff:f)
 {
  System.out.println(ff.getName());
 }
}
public static File[] show(File f)
 {
  File[] ff=f.listFiles(new FilenameFilter(){
   public boolean accept(File f,String name){
   File fff=new File(f,name);
   return fff.isFile()&&fff.getName().endsWith(".java");    
   }
  });
  return ff;
 }
}

2 或取指定目录下的所有问加你啊内的.java文件。
import java.io.File;

public class Test{
public static void main(String[] args) {
 show(new File("d:\\"));
}
public static void show(File str)
 {
  File[] f2=str.listFiles();
  for(File f3:f2)
  {
   if(f3.isDirectory()&&!f3.isHidden())
   {
    show(f3);
   }
   if(f3.getName().endsWith(".java")) 
    System.out.println(f3.getName());
  }
  
 }
}

十三 Properties
 1 定义:
  1 与io流相关的集合。
  2 用于配置文件。
  3 是以键值对形象存储的。

 2 常见方法:
  1 load()
   将数据存入集合。
  2 list()
   将集合那内的数据写到文件中。

十四 序列化流
 1 定义:
  1 将对象存储到文件中。
  2 保持对象的持久化。
  3 分为ObjectInputStream对象读取流,ObjectOutputStream对象写入流。
  4 要序列化的类必须实现
十五 序列化例题:
 将对象存储到文件再取出。
public class Test {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
 
 ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream("object.txt"));
 Student s=new Student("张三",12);
 
 os.writeObject(s);
 os.flush();
 ObjectInputStream oi=new ObjectInputStream(new FileInputStream("object.txt"));
 Object obj=(Student)oi.readObject();
 System.out.println(obj);
 os.close();
 oi.close();
}
}
 
十六 打印流PrintWriter,PrintStream 
 1 定义:
  1 他们是为其他输出流添加了功能。
  2 永远不会抛异常。
  3 可以指定编码表。
  4 当够方法如需自动刷新为true时,println() 可以自动换行和自动刷新。
  

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
   
 
 

0 0