(JAVA自学笔记)I/O流操作

      首先从字符流开始

      1.字符流的由来:因为文件编码的不同,而有了对字符进行高效操作的字符流对象。

         原理:其实就是基于字节流读取字节时,去查了指定的码表。

         字节流和字符流的区别:

         1.字节流读取的时候,读到一个字节就返回一个字节。字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,UTF-8码表是三个)时。先去查指定的编码表,将查到的字符返回。

         2.字节流可以处理所有类型数据,如图片、MP3、AVI。而字符流只能处理字符数据。

            结论:只要是处理纯文本数据,就要优先考虑使用字符流。除此之外都用字节流。

 

       2.基本的读写操作方式:因为数据通常都是以文件形式存在。所以就要找到IO体系中科院用于操作文件的流对象。IO体系中的子类名后缀绝大部分是父类名称。而前缀都是体现子类功能的名字。

  

       Reader中的常见的方法:

       1.int read():读取一个字符。返回的是读到的那个字符。如果读到流的末尾,返回-1.

       2.int read(char[]):将读到的字符存入指定的数组中,返回的是读到的字符个数,也就是往数组里装的元素的个数。如果读到流的末尾,返回-1.

       3.close():读取字符其实用的是window系统的功能,就希望使用完毕后,进行资源的释放。

      Writer中的常见的方法:

       1.write(ch):将一个字符写入到流中。

       2.write(char[]):将一个字符数组写入到流中。

       3.write(String):将一个字符串写入到流中。

       4.flush():刷新流,将流中的数据刷新到目的地中,流还存在。

       5.close():关闭资源 , 在关闭前会先调用 flush(),刷新流中的数据去目的地,然后流关闭。

       FileWriter:该类没有特有的方法只有自己的构造函数。该类特点在于

       1.用于处理文本文件。

       2.该类中有默认的编码表。

       3.该类中有临时缓冲。

 

        当指定绝对路径时,定义目录分隔符有两种方式:

        1.反斜线但是一定 要写两个。\\new FileWriter("c:\\demp.txt");

        2.斜线/写一个即可。new  FileWrite("c:/demo.txt");

 

         一个读取文件的例子(先在D盘下面创建一个test.txt文件)

       eclipse代码:

      

import java.io.*;

public class test

 public static void main(String[] args)
 { 
          readFileByChars("d:/test.txt");
 }
 public static void readFileByChars(String fileName)
 {
  File file = new File(fileName);
  Reader reader = null;
  try
  {
   if(file != null)
   {
    char[] tempchars = new char[30];
    int charread = 0;
    reader = new InputStreamReader(new FileInputStream(fileName));
    while((charread = reader.read(tempchars))!=-1)
    {
     if((charread == tempchars.length)
       && (tempchars[tempchars.length - 1]!= '\r'))
     {
      System.out.print(tempchars);
     }
     else
     {
      for(int i = 0;i < charread;i++)
      {
       if(tempchars[i] == '\r')
       {
        continue;
       }
       else
       {
        System.out.print(tempchars[i]);
       }
      }
     }
    }
   }
  }
  catch(Exception e1)
  {
   e1.printStackTrace();
  }
  finally
  {
   if(reader != null)
   {
    try
    {
     reader.close();
    }
    catch(IOException e1)
    {
     System.out.println("文件不存在");
    }
   }
  }
 }

}

 

字符流的缓冲区:缓冲区的出现提高了对流的操作效率。原理就是将数组进行封装。

对应的对象:

BufferedWriter:特有方法;newLine():跨平台的换行符。

BufferedReader:特有方法;readLine():一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回。当读到末尾时,返回null。

代码上的体现:

写入缓冲区对象。

//建立缓冲区对象必须把流对象作为参数传递个缓冲器的构造函数。

BufferedWriter bufw = new BufferedWriter(new FileWriter("buf.txt"));

bufw.write("ab");//将数据写入到缓冲区.

bufw.flush();//对缓冲区的数据进行刷新,将数据刷到目的地中。

bufw.close();//关闭缓冲区,其实关闭的是被包装在内部的流对象。

读取缓冲区对象。

BufferedReader bufr = new BufferedReader(new FileReader("buf.txt"));

String line = null;

//按照行的形式取出数据。取出的每一个行数据不包含回车符。

while(line = bufr.readline())!=null)

{

System.out.println(line);

}

bufr.close();

readLine();方法的原理:该方法用的 还是与缓冲区关联的流对象的read方法。只不过,每一次读到一个字符,先不进行具体操作,先进行临时存储。当读取到回车标记时,将临时容器中存储的数据一次性返回。

 

File文件类:

该类的出现是对文件系统中的文件以及文件夹进行对象的封装。

1.构造函数:File(String filename):将一个字符串路径(相对或绝对)封装成File对象,该路径可以存在或者不存在。

2.特别的字段:separator:跨平台的目录分隔符。如File file = new File("C:"+File.separator+"abc"+File.separator+"a.txt");

3.常见方法:

1.创建:

boolean createNewFile()throws IOException:创建文件,如果被创建的文件已经存在,则不创建。
boolean mkdir(): 创建文件夹。
boolean mkdirs(): 创建多级文件夹。

2,删除:
boolean delete():可用于删除文件或者文件夹。
注意:对于文件夹只能删除不带内容的空文件夹,对于带有内容的文件夹,不可以直接删除,必须要从里往外删除。
void deleteOnExit(): 删除动作交给系统完成。无论是否反生异常,系统在退出时执行删除动作。
3,判断:
boolean canExecute():

boolean canWrite():
boolean canRead();
boolean exists():判断文件或者文件夹是否存在。
boolean isFile(): 判断File 对象中封装的是否是文件。
boolean isDirectory():判断File 对象中封装的是否是文件夹。
boolean isHidden():判断文件或者文件夹是否隐藏。在获取硬盘文件或者文件夹时,对于系统目录中的文件,java 是无法访问的,所以在遍历,可以避免遍历隐
藏文件。
4,获取:
getName():获取文件或者文件夹的名称。
getPath():File 对象中封装的路径是什么,获取的就是什么。
getAbsolutePath():无论File 对象中封装的路径是什么,获取的都是绝对路径。
getParent(): 获取File 对象封装文件或者文件夹的父目录。
注意:如果封装的是相对路径,那么返回的是null.
long length():获取文件大小。
longlastModified():获取文件或者文件最后一次修改的时间。
static File[] listRoots():获取的是该系统中有效的盘符。
String[] list():获取指定目录下当前的文件以及文件夹名称。
String[] list(Filenamefilter): 可以根据指定的过滤器,过滤后的文件及文件夹名称。

File[] listFiles():获取指定目录下的文件以及文件夹对象。
5,重命名:
renameTo(File):
File f1 = new File("c:\\a.txt");
File f2 = new File("c:\\b.txt");
f1.renameTo(f2);//将c 盘下的a.txt 文件改名为b.txt 文件。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值