11级_Java_曹建波5.15 Java流与文件操作

来源:互联网 发布:乌鲁木齐网络赛 编辑:程序博客网 时间:2024/04/27 13:43


Java流与文件操作

 

IO(Input Output)流

IO流用来处理设备之间的数据传输

Java对数据的操作是通过流的方式

Java用于操作流的对象都在IO包中

流按操作数据分为两种:字节流与字符流。

流按流向分为:输入流,输出流。

IO流常用基类

字节流的抽象基类:

InputStream ,OutputStream。

字符流的抽象基类:

Reader , Writer。

注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。

如:InputStream的子类FileInputStream。

如:Reader的子类FileReader。

IO程序的书写

导入IO包中的类

进行IO异常处理

在finally中对流进行关闭

 

字符流——创建文件

创建流对象,建立数据存放文件

FileWriter fw = new FileWriter(“Test.txt”);

调用流对象的写入方法,将数据写入流

fw.write(“text”);

关闭流资源,并将流中的数据清空到文件中。

fw.close();

FileWriter fw = null;

              try{

                     fw= new FileWriter("Test.txt");

                     fw.write("text");

              }

              catch(IOException e){

                     System.out.println(e.toString());

              }

              finally{

                     If(fw!=null)

 

                     try{

                                                                                    fw.close();

                     }

                     catch(IOException e){

                            System.out.println(e.toString());

 

                     }                  

              }

 

字符流——读取文件

 

建立一个流对象,将已存在的一个文件加载进流。

FileReader fr = new FileReader(“Test.txt”);

创建一个临时存放数据的数组。

char[] ch = new char[1024];

调用流对象的读取方法将流中的数据读入到数组中。

fr.read(ch);

FileReader fr = null;

       try{

              fr= new FileReader("c:\\test.txt");

              char[]buf = new char[1024];

              intlen= 0;

              while((len=fr.read(buf))!=-1){

                     System.out.println(newString(buf,0,len));

              }

       }

       catch(IOException e){

              System.out.println("read-Exception:"+e.toString());

       }

       finally{

              if(fr!=null){

                     try{

                            fr.close();

                     }

                     catch(IOException e){

                            System.out.println("close-Exception:"+e.toString());

                     }

              }

       }

定义文件路径时,可以用“/”或者“\\”。

在创建一个文件时,如果目录下有同名文件将被覆盖。

在读取文件时,必须保证该文件已存在,否则出异常。

字符流的缓冲区

缓冲区的出现提高了对数据的读写效率。

对应类

BufferedWriter

BufferedReader

缓冲区要结合流才可以使用。

在流的基础上对流的功能进行了增强。

装饰设计模式

对原有类进行了功能的改变,增强。

装饰模式的基本格式。

字节流

基本操作与字符流类相同

但它不仅可以操作字符,还可以操作其他媒体文件

Copy一个Jpg文件。

import java.io.*;    

public class StreamCopy {

 

       /**

        * @param args

        */

       publicstatic void main(String[] args) throws IOException {

              BufferedInputStreambufis=new BufferedInputStream(new FileInputStream("E:\\娱乐\\图片\\素材\\L.jpg"));

             

              BufferedOutputStreambufos=new BufferedOutputStream(new FileOutputStream("res\\1.jpg"));

             

              /*intby=bufis.read();

              while(by!=-1){

                     bufos.write(by);

                     by=bufis.read();

              }*/

             

              intby=0;

              while((by=bufis.read())!=-1){

                     bufos.write(by);

              }

              bufos.close();

              bufis.close();

       }

 

}

字节流的缓冲区

同样是提高了字节流的读写效率。

转换流

 

 

InputStreamReader,OutputStreamWriter

转换流的由来

字符流与字节流之间的桥梁

方便了字符流与字节流之间的操作

转换流的应用

字节流中的数据都是字符时,转成字符流操作更高效。

RandomAccessFile

随机访问文件,自身具备读写的方法。

通过skipBytes(intx),seek(int x)来达到随机访问。

 

 

转换流

 InputStreamReader  从字节转为字符

 OutputStreamWriter  从字符转为字节  可以添加编码

 

要求:从键盘录入一行数据,如果遇到over,程序结束。

(否则,转成大写打印输出)

否则,转成大写保存到文件中

 

 

 

流的基本操作:

 

1.明确数据源和数据目的,确定使用输入流还是输出流

2.明确操作的数据是否是纯文本

    是 使用字符流

    否 使用字节流

   

 Reader  Writer   FileReader FileWriter  Buffered

 InputStream OutputStream  

 

  输入(读):System.in  File

 输出(写):Systme.out  File