JFileChooser和FileFilter的使用,以及Java RandomAccessFile用法

今天学习前辈的一个p2p下载的源代码,其中遇见了两个小问题,上网进行了百度,找到了答案,随手记录一下,以便于以后翻看。

1.首先自定义了一个文件下载的主界面,包括了创建任务、暂停任务、继续任务、删除任务,点击创建任务后需要弹出一个Jframe自带的JFileChooser,进行文件选择,并且自定义过滤器进行文件的筛选。

JFileChooser filechooser = new JFileChooser();//创建文件选择器
filechooser.setCurrentDirectory(new File("."));//设置当前目录
filechooser.setAcceptAllFileFilterUsed(false);
//显示所有文件
filechooser.addChoosableFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) {
return true;
}
public String getDescription() {
return "所有文件(*.*)";
}
});
//显示JAVA源文件
filechooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) { //设定可用的文件的后缀名,可以自定义为.ava  .xml等
if(f.getName().endsWith(".java")||f.isDirectory()){
return true;
}
return false;
}
public String getDescription() {
return "JAVA源程序(*.java)";
}
});
//可以反复使用setFileFilter方法设置JFileChooser的选择类型

2.Java RandomAccessFile用法 

在进行文件下载的时候,没有使用InputStream与outStream,而是使用了并不熟悉的RandomAccessFile,所上网搜索找到其相关的概念,以及对文件读写操作的权限控制。

RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。

RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫不相干,甚至不使用InputStream和OutputStream类中已经存在的任何功能;它是一个完全独立的类,所有方法(绝大多数都只属于它自己)都是从零开始写的。这可能是因为RandomAccessFile能在文件里面前后移动,所以它的行为与其它的I/O类有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。

基本上,RandomAccessFile的工作方式是,把DataInputStream和DataOutputStream结合起来,再加上它自己的一些方法,比如定位用的getFilePointer( ),在文件里移动用的seek( ),以及判断文件大小的length( )、skipBytes()跳过多少字节数。此外,它的构造函数还要一个表示以只读方式("r"),还是以读写方式("rw")打开文件的参数 (和C的fopen( )一模一样)。它不支持只写文件。

只有RandomAccessFile才有seek搜寻方法,而这个方法也只适用于文件。BufferedInputStream有一个mark( )方法,你可以用它来设定标记(把结果保存在一个内部变量里),然后再调用reset( )返回这个位置,但是它的功能太弱了,而且也不怎么实用。

以上两个问题是个人阅读代码过程中遇到问题后,在网上搜索找到的相关的概念,以及代码实例,仅仅用来个人学习使用。

 

转载于:https://www.cnblogs.com/xiaomai0379/p/7678168.html

你可能感兴趣的:(java)