`
- 浏览:
47260 次
- 性别:
- 来自:
成都
-
现在假设我们想观看一个目录列表。可用两种方式列出File对象。若在不含自变量(参数)的情况下调用list(),会获得File对象包含的一个完整列表。然而,若想对这个列表进行某些限制,就需要使用一个“目录过滤器”,该类的作用是指出应如何选择File对象来完成显示。
下面是用于这个例子的几段代码:
package IO;
import java.io.File;
import java.io.FilenameFilter;
class ImageFilter implements FilenameFilter{
public boolean isGif(String file) {
if (file.toLowerCase().endsWith(".gif")){
return true;
}else{
return false;
}
}
public boolean isJpg(String file){
if (file.toLowerCase().endsWith(".jpg")){
return true;
}else{
return false;
}
}
public boolean isPng(String file){
if (file.toLowerCase().endsWith(".png")){
return true;
}else{
return false;
}
}
public boolean accept(File dir,String fname){
return (isGif(fname) || isJpg(fname) || isPng(fname));
}
}
public class ImageFilterTest{
public static void main(String[] args){
File directory=new File("E:\\program\\FilenameFilter\\images");
String[] images = directory.list(new ImageFilter());
System.out.println("size="+images.length);
for (int i = 0; i < images.length; i++){
String imgfile=images[i];
System.out.println("imgfile="+imgfile);
}
}
}
下例用一个匿名内部类(已在第7章讲述)来重写显得非常理想。首先创建了一个filter()方法,它返回指向FilenameFilter的一个句柄:
package IO;
import java.io.File;
import java.io.FilenameFilter;
public class ImageFilterTestInner {
public static FilenameFilter filter(final String afn){
return new FilenameFilter(){
public boolean isGif(String file){
if(file.toLowerCase().endsWith(".gif")){
return true;
}else{
return false;
}
}
public boolean isJpg(String file){
if (file.toLowerCase().endsWith(".jpg")){
return true;
}else{
return false;
}
}
public boolean isPng(String file){
if (file.toLowerCase().endsWith(".png")){
return true;
}else{
return false;
}
}
public boolean accept(File dir,String fname){
return (isGif(fname) || isJpg(fname) || isPng(fname));
}
};
}
public static void main(String[] args){
File directory=new File("E:\\program\\FilenameFilter\\images");
String[] images = directory.list(new ImageFilter());
System.out.println("size="+images.length);
for (int i = 0; i < images.length; i++){
String imgfile=images[i];
System.out.println("imgfile="+imgfile);
}
}
}
注意filter()的自变量必须是final。这一点是匿名内部类要求的,使其能使用来自本身作用域以外的一个对象。之所以认为这样做更好,是由于FilenameFilter类现在同ImageFilterTestInner 紧密地结合在一起。然而,我们可采取进一步的操作,将匿名内部类定义成list()的一个参数,使其显得更加精简。如下所示:
package IO;
import java.io.File;
import java.io.FilenameFilter;
public class ImageFilterTestInner1 {
public static void main(String[] args){
File directory=new File("E:\\program\\FilenameFilter\\images");
String[] images = directory.list(new FilenameFilter(){
public boolean accept(File dir,String fname){
return (isGif(fname) || isJpg(fname) || isPng(fname));
}
public boolean isGif(String file){
if(file.toLowerCase().endsWith(".gif")){
return true;
}else{
return false;
}
}
public boolean isJpg(String file){
if (file.toLowerCase().endsWith(".jpg")){
return true;
}else{
return false;
}
}
public boolean isPng(String file){
if (file.toLowerCase().endsWith(".png")){
return true;
}else{
return false;
}
}
});
System.out.println("size="+images.length);
for (int i = 0; i < images.length; i++){
String imgfile=images[i];
System.out.println("imgfile="+imgfile);
}
}
}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
FilenameFilter接口为Java开发者提供了一种简单而有效的方法来筛选特定目录下的文件。通过自定义实现该接口中的`accept`方法,可以根据不同的需求筛选出符合特定条件的文件列表。这在处理大量文件时尤其有用,可以...
2. **查找文件**:使用`FilenameFilter`实现对特定扩展名的文件筛选,这里我们关注.jpg、.JPG、.gif、.GIF、.png、.PNG、.jpeg和.JPEG这几种格式的图片。 3. **加载图片**:创建Image对象,使用`getWidth()`和`...
在文章中提到了几种构造函数的用法: 1. File(String pathname):通过一个路径名字符串创建File实例,例如:"c:\\abc\\1.txt"。 2. File(String parent, String child):通过父目录路径和子目录或文件名创建实例,...
线程有几种状态:新建、就绪、运行、阻塞和终止。 ##### 5. 控制线程 可以使用线程提供的方法来控制线程的行为,如start()、stop()、join()等。 ##### 6. 多线程安全问题 多线程环境下,多个线程同时访问共享...
File类的主要构造函数有以下几种: 1. `File(String path)`:根据给定的路径字符串创建File对象。 2. `File(String parent, String child)`:根据父路径和子路径创建File对象。 **二、文件的创建与删除** - `...
可以使用包装类的`toString()`方法或构造函数将基本数据类型转换为`String`。 **4. Object类** `Object`类是所有Java类的根父类,提供了`equals()`, `hashCode()`, `toString()`等方法。 **5. 代码块** 代码块用于...
查询文件夹下的文件名称,主要通过以下几种方式实现: 1. **命令行工具**: - 在Windows系统中,我们可以使用`dir`命令(或`cmd.exe /c dir`)结合通配符(如`*`或`?`)来查找匹配的文件名。例如,`dir *.txt`将列...
首先,File类提供了一些构造函数,这些构造函数可以用于创建File对象,它们有如下几种: 1. File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建一个新的File实例。 2. File(String parent, ...
总之,`GetFileByType`项目提供了一种有效的方法,帮助开发者在Android应用中按文件类型筛选和读取SD卡上的文件。通过熟练掌握Java的文件操作和Android的外部存储API,我们可以构建出更加健壮和用户友好的文件管理...
Java图像查看器是一种应用程序,它允许用户浏览和操作图像文件。在Java中,我们可以使用AWT(Abstract Window Toolkit)和Swing库来创建这样的程序。本实例中的图像查看器是用Java实现的,主要涉及以下几个关键知识...
主要包括以下几类: 1. **字节流**:主要涉及`InputStream`(输入字节流)和`OutputStream`(输出字节流)两大类。 2. **字符流**:主要涉及`Reader`(输入字符流)和`Writer`(输出字符流)两大类。 3. **文件操作...
// 使用异步方法加载图片,例如:AsyncTask, Picasso, Glide, Fresco 等 // 加载完成后,通过handler更新UI new AsyncTask, Void, Bitmap>() { @Override protected Bitmap doInBackground(Void... voids) { /...
创建`File`对象通常通过构造函数完成,有以下几种方式: 1. `File(String pathname)`:传入一个包含完整路径的字符串,可以是文件或目录。 2. `File(String parent, String child)`:传入父路径字符串和子文件(或...
3. 文件编码转换的方法:我们可以使用 java.io.InputStream 和 java.io.OutputStream 来实现文件编码的转换。我们可以使用 InputStreamReader 和 OutputStreamWriter 来读取和写入文件,并使用 java.nio.charset....