java基础知识 ---io

疯狂java讲义笔记:

1、File类

2.文件过滤器FilenameFilter接口

在File中list()方法中可以接受一个文件过滤器参数,该方法可以列出满足条件的文件

FilenameFilter接口中有一个抽象方法accept(File file,String name),该方法可以不断迭代文件的子目录和文件,返回true的时候则输出,false则不输出

import java.io.File;
import java.io.FilenameFilter;
class MyFilter implements FilenameFilter{

	@Override
	public boolean accept(File arg0, String name) {
		// TODO Auto-generated method stub
		return name.endsWith(".java")||new File(name).isDirectory();
	}
}
public class FileNameFilterTest {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file=new File(".");
		String[] list=file.list(new MyFilter());
		for(String s:list)
		{
			System.out.println(s);
		}

	}
}

3.理解java的io流

3.1按照流的流向来说分为输入流和输出流

输入流:只能从中读取数据

输出流:只能向其中写入数据

这里的输入和输出是从内存的角度来说的。从内存输出表示的输出流,往内存读入数据使用的输入流

eg:图中所示的是服务器通过网络向客户端发送数据,对于服务器的内存来说是输出数据,所以服务器使用的是输出流,而对于客户端来说,是往内存里写入数据,所以客户端使用的是输入流,用来读取数据。

java的输入流主要是inputStream 和Reader作为基类的;

输出流主要是OutputStream 和 Writer 作为基类的。

另外也可以分为:节点流和处理流

4.RandomAccessFile 文件内容访问类:既能对文件进行读也能写,支持随机访问,可以跳转到文件的任意地方进行读写操作

与OutputStream 和Writer 不同的是,RandomAccessFile可以自由定位文件记录指针,当程序创建一个RandomAccessFile对象时,该记录指针指向文件头,当读写了N个字节后,文件记录指针将会后移N个位置。除此之外,RandomAccessFile可以自由移动记录指针,既可以向前移动也可以向后移动,方法如下

 long getFilePointer();返回文件的记录指针当前位置

void seek(long pos):将文件记录指针定位到pos的位置

下面是个例子:

<pre name="code" class="java">public class RandomAccessFileTest {
	public static void main(String[] args) {
		RandomAccessFile ra=null;
		try
		{
			ra=new RandomAccessFile("test.txt","r");
			System.out.println("文件的记录指针所在的位置"+ra.getFilePointer());
			ra.seek(300);
			byte [] buf=new byte[1024];
			//用于保存实际读取的数字
			int hasRead=0;
			//使用循环重复取水过程
			while((hasRead = ra.read(buf))>0)
			{
				//去除水桶的水滴,转换成字符串输出
				System.out.println(new String(buf,0,hasRead));
			}	
		}catch(Exception e)
		{
			e.printStackTrace();
		}finally
		{
			try
			{
				ra.close();
			}catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
}


 下面的程序是如何向文件的末尾追加内容,同样采用的RandomAccessFile类 

public class AppendContent {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		RandomAccessFile ra=null;
		try
		{
			ra=new RandomAccessFile("test.txt","rw");
			//将记录指针移动到文件的末尾
			ra.seek(ra.length());
			ra.write("这是追击的内容".getBytes());
		}catch(Exception e)
		{
			e.printStackTrace();
		}finally
		{
			try
			{
				ra.close();
			}catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值