Java IO专题

来源:互联网 发布:阿里云ftp连不上 编辑:程序博客网 时间:2024/05/07 01:59
Java IO专题


1. 编码问题--> gbk编码      中文占用两个字节  英文占用一个字节
               utf-8编码    中文占用三个字节  英文占用一个字节 
               utf-16be编码 中文占用两个字节  英文占用两个字节
   当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,
   否则会出现乱码;
   例子:
   String s="你好ABC";
   byte[] byte1 = s.getBytes();// 默认编码
   byte[] byte2 = s.getBytes("gbk");//gbk编码
   byte[] byte3 = s.getBytes("utf-8");//utf-8编码
   byte[] byte4 = s.getBytes("utf-16be");//utf-16be编码
   
   String s1 = new String(byte1);//默认解码,显示正常
   String s3 = new String(byte3);// 乱码
   String s3 = new String(byte3,"utf-8");//以utf-8解码,显示正常   
   
2. File类的使用(常见Api)-->java.io.File
   File类只用于表示文件(目录)的信息(名称,大小等),不能用于文件内容的访问
   File.separator --> 分隔符 
   File.exists()---> 文件(目录)是否存在 
   File.mkdir()/mkdirs()---> 新建目录
   File.delete()---> 删除
   File.isDirectory()--> 是否是目录,如果是目录返回true,如果不是目录或者目录不存在返回false
   File.isFile()--> 是否是文件
   File.createNewFile()--> 创建文件
   File.getAbsolutePath()-->文件绝对路径
   File.getName()-->文件名字
   File.list()--->获取File目录下的所有文件名称 (string[])
   File.listFiles()-->获取File目录下的所有文件(File[])
   
3. RandomAccessFile java提供的对文件内容的访问,可以读写文件,可以随机访问文件(可以访问文件任意位置)
   1) java文件模型:在硬盘上的文件是byte byte byte存储的,是数据的集合
   2) 打开文件
      有两种模式“rw”,“r”
       RandomAccessFile raf = new RandomAccessFile(File,"rw");
       文件指针,打开文件时指针在开头,pointer=0-->raf.getFilePointer()
   3) 写方法:
      raf.write(int)-->只写一个字节(后8位),同时指针指向下一个位置
   4) 读方法:
      raf.seek(0);//把指针移到头部
      int b=raf.read(int)-->读一个字节
 
   5) 文件读写完成以后一定要关闭
      raf.close();
 
4. IO流(输入流、输出流)
   字节流、字符流
     一、字节流
   1)InputStream、OutputStream  
            InputStream --> 抽象了应用程序读取数据的方式
            OutputStream--> 抽象了应用程序写出数据的方式 
   2) EOF=End 读到-1就读到结尾
   3) 输入流基本方法
   int b= in.read();//读取一个字节无符号填充到int低八位,-1是EOF
    in.read(byte[] buf);//读取数据填充到字节数组buf
    in.read(byte[] buf,int start,int size);//读取数据到字节数组buf,从buf的start位置开始存放
   4) 输出流的基本方法
        out.write(int b);//写出一个byte到流,b的低8位
out.write(byte[] buf);//将buf字节数组都写到流
out.write(byte[] buf,int start,int size);
    5) FileInputStream--> 具体实现了在文件上读取数据
   FileOutputStream--> 具体实现了在文件上写出byte数据
    6) DataInputStream
   DataoutputStream
对流功能的扩展(装饰模式),可以更加方便地读取int、long、字符等类型数据
DataOutputStream  writeInt()/writeDouble()/writeUTF()/writeChars()
--->DataOutputStream dos= new DataOutputStream(new FileOutputStream(file));
DataInputStream  readInt()/readDouble()/readUTF()/readChars()
--->DataInputStream  is= new DataInputStream(new FileInputStream(file));
    7) BufferedInputStream/BufferedOutStream
   这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或者读取操作时,都会加入缓存,提高了IO性能。

从应用程序中把输入放入文件,相当于把一缸水倒入另外一个缸中;
FileOutputStream-->write() 相当于一滴一滴地把水转移过去
DataOutputStream-->writeXXX()方法会更加方便一些,相当于一瓢一瓢地把水转移过去
BufferedOutStream-->write() 相当于一瓢瓢倒入桶中,然后再由桶导入另外一个缸中,提高性能

 二、字符流
 1) 编码问题
 2) 认识文本和文本文件
    java的文本(Char)是16位无符号整数,是字符的unicode编码(双字节编码);
文件是byte byte byte...的数据序列
文本文件是文本(char)序列按照某种编码方案(gbk、utf-8...)序列化为byte的存储
   3) 字符流(Reader Writer)--->操作文本文件
         字符的处理,一个处理一个字符
字符的底层依然是基本的字节序列
字符流的基本实现
   InputStreamReader 完成byte流解析为char流,按照编码解析
---> InputStreamReader isr= new InputStreamReader(new FileInputStream(file));
OutputStreamWriter 按照char流到byte流,按照编码处理
FileReader/FileWriter
BufferedReader/BufferedWriter


 
 
 
 
 
         
0 0
原创粉丝点击