黑马程序员--java IO输入与输出


---------------------- android培训java培训、期待与您交流! ----------------------


File类

File类是IO包中唯一代表磁盘文件本身信息的类,而不是文件中的内容。File类了一些与平台无关的方法来操作文件,例如创建、删除文件和重命名文件等。
java中的目录被当做一种特殊的文件使用,调用File方法可以返回目录中的所有子目录和文件名。并且java可以正确处理路径分隔符。

一些主要方法:
构造方法:File f=new File(“abc.txt”):在程序所在的目录下创建文件。
exists():判断文件是否存在,返回值为boolean型。delete():删除文件。
createNewFile():创建新文件,需要异常处理。getName():返回文件的名称。
getPath():返回文件的路径。getAbsolutePath():返回文件的绝对路径。
getParent():获得文件的父目录。canRead():判断文件是否可读。

isDirectory():判断文件是否是目录。lastModified():返回文件最后的修改时间,返回值为long型。


RandomAccessFile类
RandomAccessFile类支持随机访问方式,即可以跳到文件的任意位置进行读写。相对于顺序读写而言,随机读写等长记录格式的文件时很有优势。等长记录格式文件即文件里面存储的信息是一条条的记录,每条记录的内容长度一样,而且每条记录又可以分为若干相同的字段。
RandomAccessFile类仅限于访问操作文件,不能访问其他的IO设备。两种构造方法:
RandomAccessFile(f,”rw”);//以读写的方式打开文件

RandomAccessFile(f,r)// 以只读的方式打开文件


节点流:InputStream与OutputStream类:
FileInputStream指定的文件必须是存在与可读,OutputStream 不存在就创建,存在则覆盖,但不能指定一个已经被其他程序打开的文件。
创建FileInputStream实例对象时,指定的文件应当是存在和可读的。创建FileOutputStream实例对象时,如果指定的文件已经存在,这个文件中的原来内容将被覆盖清除,
InputStream类的方法:
int read() 读取一个字节的内容,并将该字节的内容以整数的形式返回,若到流的结尾则返回-1.若流没有结束,也没有数据可读,则会堵塞,直到有新的数据可读。
int read(byte[] b):该方法用于从输入流中读取若干个字节存放到数组当中,返回值为实际读取的字节个数。若流没有结束,也没有数据可读,则会堵塞,直到有新的数据可读。
int read(byte[] b,int off,int len):第二个参数表示数组b的下角标。返回值意义与上方法同。
void write(int b):用于将整数四个字节中最低的那个字节写到输出流中,高部分的字节被舍弃。
void write(byte[] b):将字节数组中的所有数据写入到输出流中。
void write(byte[] b,int off,int len); void fluse():用于将内存缓冲区中的内容全部清空,并输出到IO设备中。并不是所有的类都有该方法。

Reader与Writer类
Reader与Writer类是所有字符流类的抽象基类,用于简化对字符串的输入输出编程,即用与读写文本数据。
二进制文件与文本文件的区别
文件都是以二进制数据的形式存放的,每个字节都是二进制的。而各种文本字符是由一个或者多个字节而组成的,其中每个字节的数据不能是任意的,不能像二进制数据一样从零到255都可以,而表示字符的字节只能是从0到255之间的一些特殊数字,一些数字是在任何字符字节中不可能存在的。如果文件中的每个字节或每相邻的几个字节的数据都可以表示成某种字符,就可以称这个文件为文本文件。因此文本文件是二进制文件的一种特例。因此可以简单的认为,如果一个文件中除了文本数据外不包括其他二进制数据,可称该文件为文本文件,其余的为二进制文件。Reader与Writer类主要用于读取文本格式的内容,而InputStream与OutputStream主要用于读取二进制文件。
编程举例:用FileWriter类向文件中写入一个字符串,然后用FileReader读取写入的内容。
import java.io.*;
public class FileStreamTest {
       public static void main (String[] args)throws Exception{
              FileWriter out=new FileWriter("hello.txt");
              out.write("hello java"); //可以直接写入字符串
              out.close();
 
              char []buf=new char[1024];//创建字符数组
              FileReader in=new FileReader("hello.txt");
              int len=in.read(buf);//不能直接读取字符串
              System.out.println(new String(buf,0,len));
              in.close();
       }
}

写入一个字节的write方法不会将写入的字节刷新到目标IO设备中,而对于写入多个字节的write方法,则在调用此方法时,内部就会刷新一次。写入字符串的write方法内部都不会刷新。


---------------------- android培训java培训、期待与您交流! ----------------------


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值