데이터를 저장하는 장치로서 파일은 소위 파일 유형 인 데이터 유형에 따라 많은 범주를 생성합니다. 데이터 파일을 작동 할 때는 다른 파일 유형에 따라 다른 처리가 필요합니다. 이 예제는 지정된 유형의 폴더의 파일을 읽고 테이블 컨트롤에 표시합니다. 이는 프로젝트 개발에서 파일의 분류를 유치하는 데 중요한 역할을합니다.
아이디어 분석 :
양식 응용 프로그램이므로 먼저 뷰 레이어를보십시오. 버튼 컨트롤 JBUTTON은 폴더를 선택해야합니다. JLABEL은 선택한 경로를 표시해야합니다. 파일 유형을 입력하고 테이블 컨트롤 jtable이 필요합니다. 선택한 디렉토리에 지정된 유형의 파일이 표시됩니다.
버튼 컨트롤의 경우 이벤트 처리 방법을이 방법에 바인딩하려면 먼저 JFILECHOOSER 파일 선택기 객체를 작성하고 선택기에 대한 필터를 설정하십시오. 그런 다음 showdialog () 메소드를 실행 한 다음 jfilechooser 클래스의 getSelectedFile () 메소드를 사용하여 선택한 경로를 가져 와서 파일 유형 변수에 할당하고 TOSTRING () 메소드를 사용하여 레이블에 경로를 표시합니다. 조건을 충족하는 필터링 된 파일 배열을 가져옵니다.
텍스트 상자 컨트롤의 경우 텍스트 내부가 변경되면 선택한 경로의 파일을 다시 설정해야합니다. 따라서 이벤트 처리 방법은 jtextfield 클래스 AddCaretListener () 메소드에 바인딩되며 필터링 된 적합성은이 메소드 배열에서 얻습니다. 조건에 대한 파일.
버튼 컨트롤과 텍스트 박스 컨트롤은 필터링 및 디스플레이를 구현해야합니다.이 방법에서는 먼저 비어 있지 않은지 결정하십시오. ) 파일 클래스의 메소드 조건을 충족하는 파일 배열을 가져오고 파일 유형 배열에 값을 할당 한 다음 jtable 클래스의 getModel () 메소드를 사용하여 테이블의 데이터 모델을 얻고 SetRow를 사용합니다. DefaultTableModel 클래스의 데이터 모델을 얻습니다. count () 메소드는 먼저 테이블을 지우고 foreach ()를 사용하여 파일 배열을 통해 루프하고 루프에서 객체 [] 배열을 사용하여 테이블 행 데이터를 작성하고 파일 클래스의 getName () 메서드를 호출하여 파일 이름을 얻습니다. 파일 크기를 가져 오려는 길이 () 메소드, lastmodified () 메소드는 수정 날짜를 가져오고 마지막으로 기본 테이블 메모 델 클래스의 addrow () 메소드를 사용하여 표 데이터에 행 데이터를 추가합니다.
코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
java.awt.borderlayout import;
java.awt.eventqueue import;
java.awt.gridbagconstraints import;
java.awt.gridbaglayout import;
java.awt.insets 가져 오기;
import java.awt.event.actionevent;
import java.awt.event.actionListener;
import java.io.file;
java.sql.date 가져 오기;
import javax.swing.jbutton;
import javax.swing.jfilechooser;
import javax.swing.jframe;
import javax.swing.jlabel;
import javax.swing.jpanel;
import javax.swing.jscrollpane;
import javax.swing.jtable;
import javax.swing.jtextfield;
import javax.swing.border.emptyborder;
import javax.swing.event.caretevent;
import javax.swing.event.caretlistener;
import javax.swing.table.defaultTableModel;
공개 클래스 ListCustomTyPefile 확장 jframe {
/**
*
*/
개인 정적 최종 최종 긴 SerialversionUID = -6263975104443132420L;
/**
* 사용자 정의 확장 필터
*
* @Author Li Zhongwei
*/
Private Final Class CustomFilter는 Java.io.filefilter {
@보수
공개 부울 수락 (파일 pathname) {
// 사용자가 설정 한 지정된 확장자를 가져옵니다
문자열 extName = extNamefield.getText ();
if (extName == null || extName.isempty ())
거짓을 반환합니다.
if (! extname.startSwith ( ".")) // 확장자 접두사를 결정합니다
extname = "."
extName = extName.TOLOWERCASE ();
// 확장자 및 필터 파일 이름이 요구 사항을 충족하는지 확인
if (pathname.getName (). tolowercase (). endswith (extname))
진실을 반환하십시오.
거짓을 반환합니다.
}
}
개인 jpanel contentpane;
개인 Jtextfield ExtNamefield;
개인 JTable 테이블;
개인 파일 dir;
개인 jlabel 레이블;
/**
* 응용 프로그램을 시작하십시오.
*/
public static void main (String [] args) {
eventqueue.invokelater (new Runnable () {
public void run () {
노력하다 {
ListCustomTyPefile 프레임 = 새 ListCustomTyPefile ();
frame.setVisible (true);
} catch (예외 e) {
e.printstacktrace ();
}
}
});
}
/**
* 프레임을 만듭니다.
*/
공개 ListCustomTyPefile () {
settitle ( "지정된 유형의 쇼 파일");
setDefaultCloseOperation (jframe.exit_on_close);
세트 바운드 (100, 100, 450, 300);
ContentPane = 새로운 jpanel ();
ContentPane.SetBorder (New Emptyborder (5, 5, 5, 5));
ContentPane.SetLayout (New BorderLayout (0, 0));
SetContentPane (ContentPane);
JPANEL 패널 = 새로운 JPANEL ();
contentpane.add (Panel, BorderLayout.north);
gridbaglayout gbl_panel = new Gridbaglayout ();
gbl_panel.columnwidths = new int [] {93, 54, 0};
gbl_panel.rowheights = new int [] {23, 0, 0};
gbl_panel.columnweights = new Double [] {0.0, 1.0, double.min_value};
gbl_panel.rowweights = new double [] {0.0, 0.0, double.min_value};
PALEN.SETLAYOUT (GBL_PANEL);
jbutton button = new Jbutton ( "선택 폴더");
button.addactionListener (new ActionListener () {
public void actionperformed (ActionEvent e) {
do_button_actionperformed (e);
}
});
Gridbagconstraints GBC_BUTTON = New GridbagConstraints ();
gbc_button.anchor = gridbagconstraints.north;
gbc_button.gridx = 0;
gbc_button.gridy = 0;
PALEN.ADD (버튼, GBC_BUTTON);
label = new Jlabel ( "폴더");
gridbagconstraints gbc_label = new Gridbagconstraints ();
gbc_label.fill = gridbagconstraints.horizontal;
gbc_label.gridx = 1;
gbc_label.gridy = 0;
PALEN.ADD (레이블, GBC_LABEL);
jlabel label_1 = new Jlabel ( "지정된 파일 확장자 이름을 입력하십시오 :");
gridbagconstraints gbc_label_1 = new gridbagconstraints ();
gbc_label_1.anchor = gridbagconstraints.east;
gbc_label_1.insets = 새로운 삽입 (0, 0, 0, 5);
gbc_label_1.gridx = 0;
gbc_label_1.gridy = 1;
PALEN.ADD (label_1, gbc_label_1);
extNamefield = 새로운 jtextfield ();
extNamefield.addcaretListener (New CaretListener () {
공개 void careupdate (Caretevent e) {
do_extnamefield_caretupdate (e);
}
});
extNamefield.settext ( ". gif");
gridbagconstraints gbc_extnamefield = new gridbagconstraints ();
gbc_extnamefield.insets = 새로운 삽입 (0, 0, 5, 0);
gbc_extnamefield.fill = gridbagconstraints.horizontal;
gbc_extnamefield.gridx = 1;
gbc_extnamefield.gridy = 1;
PALEN.ADD (ExtNamefield, GBC_EXTNAMEFIELD);
ExtNamefield.SetColumns (10);
jscrollpane scrollpane = new jscrollpane ();
contentpane.add (scrollpane, borderlayout.center);
표 = 새로운 jtable ();
Table.SetAutoResizemode (jtable.auto_resize_off);
table.setModel (new defaultTableModel (new Object [] [] [] {], new String [] { "파일 이름", "파일 크기", "수정 날짜"}) {
/**
*
*/
개인 정적 최종 최종 긴 SerialversionUID = 527421459103654856L;
부울 [] columnedItables = new boolean [] {false, false, false};
공개 부울 iscelledible (int row, int column) {
ColumnedItables를 반환합니다 [열];
}
});
table.getColumnModel (). getColumn (0) .setPreferredWidth (220);
table.getColumnModel (). getColumn (1) .SetPreferRedWidth (85);
table.getColumnModel (). getColumn (2) .SetPreferredWidth (110);
scrollpane.setViewPortView (표);
}
/**
* 폴더 버튼의 이벤트 처리 방법을 선택하십시오
*
* @param e
*/
보호 된 void do_button_actionperformed (ActionEvent e) {
JFILECHOOSER ChooSer = new JFILECHOOSER (); // 파일 선택기를 만듭니다
// 셀렉터 용 필터를 설정합니다
chooser.setfileSelectionMode (jfilechooser.directories_only);
chooser.showdialog (this, null);
dir = chooser.getSelectedFile ();
getLabel (). setText (dir.toString ());
// 기준을 충족하는 필터링 된 파일 배열 가져옵니다.
ListFiles ();
}
/**
* 폴더에 파일이 표시됩니다
*/
private void listfiles () {
if (dir == null)
반품;
// 기준을 충족하는 파일 배열을 가져옵니다
file [] files = dir.listfiles (new CustomFilter ());
// 테이블의 데이터 모델을 가져옵니다
defaultTableModel model = (defaultTableModel) table.getModel ();
model.setrowcount (0);
for (파일 파일 : 파일) {// 파일 배열을 통과
// 테이블 행 데이터를 만듭니다
Object [] row = {file.getName (), file.length (),
새 날짜 (file.lastModified ())};
model.addrow (행); // 테이블 모델에 행 데이터를 추가합니다
}
}
보호 된 void do_extnamefield_caretupdate (Caretevent e) {
ListFiles ();
}
보호 된 jlabel getLabel () {
리턴 레이블;
}
}
효과는 그림에 나와 있습니다.