File 对象 f 调用 list 方法时,需向该方法传递一个实现 FilenameFilter 接口的对象,list 方法执行时,参数 obj 不断回调接口方法accept(File f,String name),该方法中的参数 f 为,调用 list 的当前目录,参数 name 被实例化为当前目录中的一个文件名,当接口方法返回 true 时,list 方法就将名字为 name 的文件存放到返回的数组中。
import java.io.*;
public class Filelei implements FilenameFilter {//此次使用本类作为接口
/**
* @param args
*/
public void f(){
File f=new File("E:\\Myworkspace\\08\\src");
String []filename=f.list();//以字符串的形式,先列出当前目录下所有文件看一下(有什么类型的文件)
for(int i=0;i<filename.length;i++){
System.out.println(filename[i]);
}
System.out.println("********************************");
String []fname=f.list(this);
for(int i=0;i<fname.length;i++){
System.out.println(fname[i]);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Filelei().f();
}
@Override
public boolean accept(File f, String name) {//重写接口方法
// TODO Auto-generated method stub
return name.endsWith(".java");//返回当前目录下以.java结尾的文件
}
}
1361Java Scanner 类
输入的时候字符都是可见的,所以Scanner类不适合从控制台读取密码。从Java SE 6开始特别引入了Console类来实现这个目的。若要读取一个密码,可以采用下面这段代码:
为了安全起见,返回的密码存放在一维字符数组中,而不是字符串中。在对密码进行处理之后,应该马上用一个填充值覆盖数组元素。
采用Console对象处理输入不如采用Scanner方便。每次只能读取一行输入,而没有能够读取一个单词或者一个数值的方法。
1360Java Stream、File、IO
BufferedReader 是支持同步的,而 Scanner 不支持。如果我们处理多线程程序,BufferedReader 应当使用。
BufferedReader 相对于 Scanner 有足够大的缓冲区内存。
Scanner 有很少的缓冲区(1KB 字符缓冲)相对于 BufferedReader(8KB字节缓冲),但是这是绰绰有余的。
BufferedReader 相对于 Scanner 来说要快一点,因为 Scanner 对输入数据进行类解析,而 BufferedReader 只是简单地读取字符序列。
1359Java Stream、File、IO
FileOutputStream 读写文件举例中出现乱码, 跟字符集编码无关, 是由于读写的格式不同导致的。
1358Java Stream、File、IO
有时需要列出目录下指定类型的文件,例如:. java、. txt 等扩展名的文件。可以使用File类的下述两个方法,列出指定类型的文件:
上述两个方法的参数 FilenameFilter 是一个接口,该接口有一个方法:
File 对象 f 调用 list 方法时,需向该方法传递一个实现 FilenameFilter 接口的对象,list 方法执行时,参数 obj 不断回调接口方法accept(File f,String name),该方法中的参数 f 为,调用 list 的当前目录,参数 name 被实例化为当前目录中的一个文件名,当接口方法返回 true 时,list 方法就将名字为 name 的文件存放到返回的数组中。
运行结果:
1357Java Stream、File、IO
自己写了一个简单的小程序用来剪辑特定长度的音频,并将它们混剪在一起,大体思路是这样的:
1. 使用 FileInputStream 输入两个音频
2. 使用 FileInputStream的skip(long n) 方法跳过特定字节长度的音频文件,比如说:输入 skip(1024*1024*3),这样就能丢弃掉音频文件前面的 3MB 的内容。
3. 截取中间特定长度的音频文件:每次输入 8KB 的内容,使用 count 记录输入次数,达到设置的次数就终止音频输入。比如说要截取 2MB 的音频,每次往输入流中输入 8KB 的内容,就要输入 1024*2/8 次。
4. 往同一个输出流 FileOutputStream 中输出音频,并生成文件,实现音频混合。
音乐素材下载: Download
下面就给出相关代码: