IO流_若雪似风_新浪博客

File类

基本概念:为了很方便的代表文件的概念,以及存储一些对于文件的基本操作,在java.io包中设计了一个专门的类——File类。

   在File类中包含了大部分和文件操作的功能方法,该类的对象可以代表一个具体的文件或文件夹,所以以前曾有人建议将该类的类名修改成FilePath,因为该类也可以代表一个文件夹,更准确的说是可以代表一个文件路径。

    File类提供的各种方法能够创建、删除文件和目录,获取磁盘上指定文件和目录的相关信息。

 

File类的构造方法:

File(String fileName)

完整路径或相对路径

 

File(String directory,String

fileName)

指定文件目录和文件名

 

File(File directory,String fileName)

 

使用File对象来表示文件目录

 

 

注意:调用构造函数只能创建一个File对象,而不是在文件系统中创建了一个文件

File file = new File("d:\\test.txt");

 

 

boolean exists() 文件或目录是否存在

boolean isFile() 是否是文件

boolean isDirectory() 是否是目录

String  getName() 获取文件或目录的名字

long  lastModified() 获取最后的修改日期

long  length() 获取文件大小,字节为单位

String[] list() 如果对象是目录,则返回目录下所有文件和目录名字的列表

mkdir() 创建File中的目录

mkdirs() 创建File中的目录,如果父目录不存在,还会创建父目录

renameTo(File f) 修改文件的名称,会删除原文件

createNewFile() 如果File代表文件,则创建一个空文件

boolean delete() 删除文件或目录(如果目录下包含子目录或文件,则不能删除)

 

 

创建一个文件:

1、调用File对象的createNewFile()

2、调用FileOutputStream()

 

创建一个目录:

1、mkdir(); 创建父目录已经存在的目录

2、mkdirs();创建多层目录

 

 windows下。分隔符是“\”  linux下。分隔符是“/”   File.separator 

 

如果现在给定了一个文件夹,要求可以将这个文件夹中的内容全部列出,此时,可以使用以下的两种方法: 

 第一种方法:public String[] list() 

 第二种方法:public File[] listFiles() 

例子:

public static void main(String[] args) {

File file = new File("D:" + File.separator + "html");

showfile(file);

}

 

public static void showfile(File file) {

if (file.isFile()) {

System.out.println(file.getName());

} else {

File[] files = file.listFiles();

if (files != null) {

for (File f : files) {

showfile(f);

}

}

}

}

 

 

 

 

 

 

 

 

 

 

 

IO流

 

   大部分程序都需要输入/输出处理,比如从键盘读取数据、向屏幕中输出数据、从文件中读或者向文件中写数据、在一个网络连接上进行读写操作等。

 

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

 

按照数据的输入输出方式分为:

输入流(Input Stream)和输出流(Output Stream)

 

对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。

输入就是指input,输出就是指output,输入输出就是指某个方向的数据流动

 

根据处理数据类型的不同分为:字节流和字符流

字节流 :InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。

字符流:Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。

3根据数据流的功能不同分为:节点流和处理流(过滤流)

 

字节流和字符流的区别:

 

    1,字节流读取的时候,读到一个字节就返回一个字节。 

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

    2,字节流可以处理所有类型数据,如图片,mp3,avi。 

           而字符流只能处理字符数据。 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BufferedInputStream

BufferedOutputStream

 

 

 

 

BufferedOutputStream有一个Byte[] buf成员,按理说用下面的代码就能得到其默认大小

 

BufferedOutputStream bos = new BufferedOutputStream(someOutputStream);

 

bos.buf.length;

 

但是buf是protected变量,不能直接访问,也没有相应的get方法,怎么办?我们知道protected成员在继承树上是可见的,就是说其孩子可见,那么可以想到通过继承BufferedOutputStream的办法,来获取buf的大小,代码如下:

 

 

 

public class MyBufferedOutputStream extends BufferedOutputStream {

 

public MyBufferedOutputStream(OutputStream out){

 

super(out);

 

System.out.println("buf size: " + super.buf.length);

 

System.out.println("count: " + super.count);

 

}

 

 

public static void main(String[] args) {

 

try {

 

MyBufferedOutputStream mbos = new MyBufferedOutputStream(new FileOutputStream("123.txt"));

 

} catch (FileNotFoundException e) {

 

e.printStackTrace();

 

}

 

}

 

}

 

 

 

 

 

运行结果为:8192字节!

 

对于bufferedInputStream也一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值