现在有如下程序,可以使用文件对话框读取文件,但是没有文件过滤功能,请问该怎么处理?谢谢!!(比如过滤*.txt类型的文件) FileDialog fdlg=new FileDialog(this,"打开", FileDialog.LOAD);
fdlg.setVisible(true);
String fname=fdlg.getDirectory()+fdlg.getFile();
try
{
FileInputStream fi=new FileInputStream(fname);
byte buffer[]=new byte[fi.available()];
fi.read(buffer);
jTextArea1.setText(new String(buffer));
fi.close();
}
catch(IOException ioe)
{
……………………
}
fdlg.setVisible(true);
String fname=fdlg.getDirectory()+fdlg.getFile();
try
{
FileInputStream fi=new FileInputStream(fname);
byte buffer[]=new byte[fi.available()];
fi.read(buffer);
jTextArea1.setText(new String(buffer));
fi.close();
}
catch(IOException ioe)
{
……………………
}
解决方案 »
- 不知道了
- 高手指点一下!
- 如何弹出一个对话框,包含一个下拉框,选择后,关闭,并返回选择的项目索引??
- JFileChooser保存文件时,输入中文文件名,就会出现保存文件的对话框失去焦点的情况,好像是调用JFIleChooser本身的输入法对话框的,请教大侠这个怎么规避,谢谢!~
- 初手:请教一个小问题
- 怎样将eclipse用NLpack1-eclipse-SDK-3.2.1-win32.zip汉化?
- 刚建了一个java学习群,还没有人加入,有兴趣的都可以加入!
- 谁帮我解决问题,我就把分给谁!
- 关于together的问题
- 急救!!!!!!!!!!!请各位高手指点!!
- 如何根据一个时间设置,循环执行某段代码呢?
- 999.......紧急事件....请问在TextArea里面显示图片...
filechooser.setApproveButtonText("打开");
filechooser.setDialogTitle("Open certificate"); filechooser.setFileFilter(new CertFilter());---------------------------------------
class CertFilter extends javax.swing.filechooser.FileFilter {
final static String cfg = "cer"; public boolean accept(File f) {
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
String extension = s.substring(i + 1).toLowerCase();
if (cfg.equals(extension)) {
return true;
} else {
return false;
}
}
;
return false;
} // The description of this filter
public String getDescription() {
return "certificate files (*.cer)";
}
}
* 创建日期 Sep 6, 2005
* 项目名称 Library.UI
* 所在包名 jp.kernel.conqueror.lib.ui.filechooser
* 版权所有 (C) 1996-2005 困了
*/
package jp.kernel.conqueror.lib.ui.filechooser;import java.io.File;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;import javax.swing.filechooser.FileFilter;import jp.kernel.conqueror.lib.lang.LCStringBank;/**
* 文件类型过滤器
*
* @author 困了
* @version 1.0.0
*/
public class LUIFileFilter extends FileFilter {
/** 描述后缀之间的间隔字符 */
protected static String strToken; /**
* 获取描述后缀之间的间隔字符
*
* @return 描述后缀之间的间隔字符
*/
protected static synchronized String getToken() {
return null != strToken ? strToken : (strToken = ", ");
} /** 是否已经设置了描述信息 */
protected boolean blnHasDes; /** 所有的过滤器 */
protected Set<String> setFilter; /** 描述信息缓冲池 */
protected StringBuilder strDescription; /** 完全的描述信息缓冲池 */
protected StringBuilder strExtensionList; /**
* 初始化过滤器
*/
public LUIFileFilter() {
super();
} /**
* 初始化过滤器
*
* @param extension
* 后缀名
*/
public LUIFileFilter(String extension) {
this(extension, null);
} /**
* 初始化过滤器
*
* @param extension
* 后缀名
* @param description
* 描述信息
*/
public LUIFileFilter(String extension, String description) {
super();
if (null != extension) {
addExtension(extension);
}
if (null != description) {
setDescription(description);
}
} /**
* 初始化过滤器
*
* @param filters
* 一组后缀名
*/
public LUIFileFilter(String[] filters) {
this(filters, null);
} /**
* 初始化过滤器
*
* @param filters
* 一组后缀名
* @param description
* 描述信息
*/
public LUIFileFilter(String[] filters, String description) {
super();
if (null != filters) {
for (final String FILTER : filters) {
addExtension(FILTER);
}
}
if (null != description) {
setDescription(description);
}
} /**
* @see javax.swing.filechooser.FileFilter#accept(java.io.File)
*/
public boolean accept(File f) {
if (null != f) {
if (f.isDirectory()) {
return true;
}
boolean blnAccept = false;
StringBuilder strAccept = LCStringBank.lendBuilder();
strAccept.append(getExtension(f));
if ((0 < strAccept.length())
& getFilterSet().contains(strAccept.toString())) {
blnAccept = true;
}
LCStringBank.returnBuilder(strAccept);
return blnAccept;
}
return false;
} /**
* 增加一个后缀名
*
* @param extension
* 后缀名
*/
public void addExtension(String extension) {
if (null != extension) {
getFilterSet().add(extension.trim().toLowerCase());
setExtensionListInDescription();
}
} /**
* @see javax.swing.filechooser.FileFilter#getDescription()
*/
public String getDescription() {
if (blnHasDes) {
StringBuilder strFull = LCStringBank.lendBuilder();
strFull.append(getDescriptionBuffer()).append(" (").append(
getExtensionListBuffer()).append(')');
final String DES = strFull.toString();
LCStringBank.returnBuilder(strFull);
return DES;
}
return getExtensionListBuffer().toString();
} /**
* 获取描述信息缓冲池
*
* @return 描述信息缓冲池
*/
protected synchronized StringBuilder getDescriptionBuffer() {
return null != strDescription ? strDescription
: (strDescription = new StringBuilder());
} /**
* 获取文件后缀名
*
* @param f
* 文件名称
* @return 文件后缀名
*/
protected String getExtension(File f) {
if (null != f) {
StringBuilder strExt = LCStringBank.lendBuilder();
strExt.append(f.getName());
final int INDEX = strExt.lastIndexOf(".");
String strExtension = null;
if ((0 < INDEX) & (INDEX < strExt.length() - 1)) {
strExtension = strExt.substring(INDEX + 1).toLowerCase();
}
LCStringBank.returnBuilder(strExt);
if (null != strExtension) {
return strExtension;
}
}
return null;
} /**
* 获取完全的描述信息缓冲池
*
* @return 完全的描述信息缓冲池
*/
protected synchronized StringBuilder getExtensionListBuffer() {
return null != strExtensionList ? strExtensionList
: (strExtensionList = new StringBuilder());
} /**
* 获取所有的过滤器
*
* @return 所有的过滤器
*/
protected synchronized Set<String> getFilterSet() {
return null != setFilter ? setFilter : (setFilter = Collections
.synchronizedSet(new LinkedHashSet<String>()));
} /**
* 移除一个后缀名
*
* @param extension
* 后缀名
*/
public void removeExtension(String extension) {
if (null != extension) {
getFilterSet().remove(extension.trim().toLowerCase());
setExtensionListInDescription();
}
} /**
* 设置描述信息
*
* @param description
* 描述信息
*/
public void setDescription(String description) {
if (null != description) {
StringBuilder strDes = getDescriptionBuffer();
strDes.delete(0, strDes.length()).append(description);
blnHasDes = (0 < description.length());
}
} /**
* 设置完全的描述信息
*/
protected void setExtensionListInDescription() {
StringBuilder strExt = getExtensionListBuffer();
strExt.delete(0, strExt.length());
final Set<String> FILTERS = getFilterSet();
final String TOKEN = getToken();
for (final String FILTER : FILTERS) {
strExt.append("*.").append(FILTER.toUpperCase()).append(TOKEN);
}
final int LENGTH = strExt.length();
strExt.delete(LENGTH - TOKEN.length(), LENGTH);
}
}
public void setFilenameFilter(FilenameFilter filter)
Sets the filename filter for this file dialog window to the specified filter. Filename filters do not function in Sun's reference implementation for Microsoft Windows. Parameters:
filter - the specified filter
See Also:
FilenameFilter, getFilenameFilter()------------------
继承一下FilenameFilter,重写accept方法应该就可以了,楼主可以看看api,应该跟filechooser类似的
public class MyFilter implements FilenameFilter
{
String str="txt";
public boolean accept(File file,String name)
{
int i=name.lastIndexOf('.');
if (i>0&&i<name.length()-1)
{
String extension=name.substring(i+1).toLowerCase();
if(str.equals(extension))
return true;
else
return false;
}
}
}
我想声明下:
我已经实现了javax.swing.filechooser.FileFilter类中的accept()的重载,但只可以在jFile-
chooser中实现文件过滤。
我也用类式的方法实现了java.io.FilenameFilter中的accept()的重载,但却不能在FileDialog
对话框中实现文件的过滤。我想可能是我的accept()方法有问题,你能不能就我上面的accept()改一下。谢谢!!
Sets the filename filter for this file dialog window to the specified filter. Filename filters do not function in Sun's reference implementation for Microsoft Windows.
*****************************************************************************************
import java.util.Hashtable;
import java.util.Enumeration;
import javax.swing.*;
import javax.swing.filechooser.*;public class ExampleFileFilter extends FileFilter { private static String TYPE_UNKNOWN = "Type Unknown";
private static String HIDDEN_FILE = "Hidden File"; private Hashtable filters = null;
private String description = null;
private String fullDescription = null;
private boolean useExtensionsInDescription = true; public ExampleFileFilter() {
this.filters = new Hashtable();
} public ExampleFileFilter(String extension) {
this(extension,null);
} public ExampleFileFilter(String extension, String description) {
this();
if(extension!=null) addExtension(extension);
if(description!=null) setDescription(description);
} public ExampleFileFilter(String[] filters) {
this(filters, null);
} public ExampleFileFilter(String[] filters, String description) {
this();
for (int i = 0; i < filters.length; i++) {
// add filters one by one
addExtension(filters[i]);
}
if(description!=null) setDescription(description);
} public boolean accept(File f) {
if(f != null) {
if(f.isDirectory()) {
return true;
}
String extension = getExtension(f);
if(extension != null && filters.get(getExtension(f)) != null) {
return true;
};
}
return false;
} public String getExtension(File f) {
if(f != null) {
String filename = f.getName();
int i = filename.lastIndexOf('.');
if(i>0 && i<filename.length()-1) {
return filename.substring(i+1).toLowerCase();
};
}
return null;
}
public void addExtension(String extension) {
if(filters == null) {
filters = new Hashtable(5);
}
filters.put(extension.toLowerCase(), this);
fullDescription = null;
} public String getDescription() {
if(fullDescription == null) {
if(description == null || isExtensionListInDescription()) {
fullDescription = description==null ? "(" : description + " (";
// build the description from the extension list
Enumeration extensions = filters.keys();
if(extensions != null) {
fullDescription += "." + (String) extensions.nextElement();
while (extensions.hasMoreElements()) {
fullDescription += ", ." + (String) extensions.nextElement();
}
}
fullDescription += ")";
} else {
fullDescription = description;
}
}
return fullDescription;
}
public void setDescription(String description) {
this.description = description;
fullDescription = null;
}
public void setExtensionListInDescription(boolean b) {
useExtensionsInDescription = b;
fullDescription = null;
}
public boolean isExtensionListInDescription() {
return useExtensionsInDescription;
}
}
{
final static String str = "txt"; public boolean accept(File file,String name) {
int i = name.lastIndexOf('.');
if (i > 0 && i < name.length() - 1) {
String extension = name.substring(i + 1).toLowerCase();
if (str.equals(extension)) {
return true;
} else {
return false;
}
} return false;
} public String getDescription() {
return "文件类型 (*.txt)";
}
}
FileDialog fdlg=new FileDialog(this,"Open",FileDialog.LOAD);
MyFilter filter=new MyFilter();
fdlg.setFilenameFilter(filter);
fdlg.show();上面的代码不能实现文件的过滤。
就是implements FileFilter -> FilenameFilterpublic boolean accept(File file) --> public boolean accept(File dir, String name) { //这个方法乃关键代码
File file = new File(dir, name);
后面不变
}
dialog.setFileName("*.txt");
dialog.open();
这样就可以实现过滤
fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) {
return f.isDirectory() || f.getName().endsWith(".xml");
} public String getDescription() {
return "xml 文件";
}
});