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( )返回這個位置,但是它的功能太弱了,而且也不怎麽實用。
以上兩個問題是個人閱讀代碼過程中遇到問題後,在網上搜索找到的相關的概念,以及代碼實例,僅僅用來個人學習使用。
JFileChooser和FileFilter的使用,以及Java RandomAccessFile用法