139if(files[i].isFile()){
140System.out.println(files[i].getName());
141}else{
142if(files[i].listFiles().length>0){
143System.out.println(files[i].getName());
144findFile(files[i]);
145}else{
146System.out.println(files[i].getName());
147}
148}
149}
150}
151}
152/*
153打印结果:
154a.txt
155新建文件夹
156---------------
157a.txt
158新建文件夹
159---------------
160a.txt
161新建文件夹
162b.txt
163*/
File过滤器
[java]viewplaincopy
164packagecom.itlwc;
165importjava.io.File;
166importjava.io.FilenameFilter;
167publicclassIO{
168publicstaticvoidmain(String[]args){
169Filefile=newFile("d:
\\文件夹");
170findJava1(file);
171System.out.println("-------------");
172findJava2(file);
173}
174
175//使用原始方法过滤文件
176publicstaticvoidfindJava1(Filefile){
177String[]str=file.list();
178for(Strings:
str){
179if(s.endsWith(".java")){
180System.out.println(s);
181}
182}
183}
184
185//使用FilenameFilter过滤文件
186publicstaticvoidfindJava2(Filefile){
187String[]str=file.list(newFilenameFilter(){
188publicbooleanaccept(Filedir,Stringname){
189if(name.endsWith(".java"))
190returntrue;
191returnfalse;
192}
193});
194for(Strings:
str){
195System.out.println(s);
196}
197}
198}
IO流
[plain]viewplaincopy
199Java的流建立在4个抽象类的基础上
200InputStream,OutputStream,Reader,Writer
201InputStream和OutputStream是字节流
202Reader和Writer是字符流
203一般的流都是单向的,java.io.RandomAccessFile类比较特殊,是一个双向的
204IO流分类
205根据功能分为:
206输入流(InputStream)和输出流(OutputStream)
207通常人站在程序的角度来判断流的方向
208输入流只能读数据
209输出流只能写数据
210根据结构分为:
211字节流(ByteStream)和字符流(CharacterStream)
212字节流以字节为单位进行数据传输,用于处理字节和二进制对象
213字符流以字符为单位进行数据传输,用于处理字符和字符串
214根据数据流操作方式分为:
215节点流(NodeStream)和过滤流(FilterStream)
216节点流是可以直接创建的流
217过滤流是可以装饰节点流让节点流功能更强大,过滤流使用了装饰者模式
218节点流和过滤流一般是配合使用
219转换流
220字节流和字符流之间的转化,一般字节流不方便操作,转换为字符流处理
FileOutputSteam/BufferedOutputStream写文件
[java]viewplaincopy
221packagecom.itlwc;
222
223importjava.io.BufferedOutputStream;
224importjava.io.FileOutputStream;
225
226publicclassIO{
227//输出流写入文件
228publicvoidexecute1()throwsException{
229FileOutputStreamfos=newFileOutputStream("D:
\\文件夹\\a.txt",true);
230Stringstr="abcdefghigklmnopqrstuvwxyz";
231byte[]buf=str.getBytes();
232fos.write(buf);
233fos.close();
234}
235
236//输出流带缓冲写入文件
237publicvoidexecute2()throwsException{
238FileOutputStreamfos=newFileOutputStream("D:
\\文件夹\\a.txt",true);
239BufferedOutputStreambos=newBufferedOutputStream(fos);
240Stringstr="abcdefghigklmnopqrstuvwxyz";
241byte[]buf=str.getBytes();
242bos.write(buf);
243//使用缓冲流一定要flush(),如果关闭流会自动flush()
244bos.close();
245}
246
247publicstaticvoidmain(String[]args)throwsException{
248newIO().execute1();
249newIO().execute2();
250}
251}
FileInputSteam/BufferedInputStream读文件
[java]viewplaincopy
252packagecom.itlwc;
253
254importjava.io.BufferedInputStream;
255importjava.io.FileInputStream;
256
257publicclassIO{
258//输入流读取文件
259publicvoidexecute1()throwsException{
260FileInputStreamfis=newFileInputStream("D:
\\文件夹\\a.txt");
261byte[]buf=newbyte[1024];
262//从输入流中读取一定数量的字节并将其存储在缓冲区数组b中
263intlen=fis.read(buf);
264Stringstr="";
265while(len!
=-1){
266//构造一个新的String,方法是使用指定的字符集解码字节的指定子数组
267str=newString(buf,0,len);
268len=fis.read();
269}
270System.out.print(str);
271fis.close();
272}
273
274//输入流带缓冲读取文件
275publicvoidexecute2()throwsException{
276FileInputStreamfis=newFileInputStream("D:
\\文件夹\\a.txt");
277BufferedInputStreambis=newBufferedInputStream(fis);
278byte[]buf=newbyte[1024];
279intlen=bis.read(buf);
280Stringstr="";
281while(len!
=-1){
282str=newString(buf,0,len);
283len=fis.read();
284}
285System.out.print(str);
286//使用缓冲流一定要flush(),如果关闭流会自动flush()
287bis.close();
288}
289
290publicstaticvoidmain(String[]args)throwsException{
291newIO().execute1();
292System.out.println();
293newIO().execute2();
294}
295}
296/*
297打印结果:
298abcdefghigklmnopqrstuvwxyzabcdefghigklmnopqrstuvwxyz
299abcdefghigklmnopqrstuvwxyzabcdefghigklmnopqrstuvwxyz
300*/
实现文件拷贝
[java]viewplaincopy
301packagecom.itlwc;
302
303importjava.io.BufferedInputStream;
304importjava.io.BufferedOutputStream;
305importjava.io.FileInputStream;
306importjava.io.FileOutputStream;
307
308publicclassIOInputOutputStream{
309//输入流输出流实现拷贝文件
310publicvoidexecute1()throwsException{
311FileInputStreamfis=newFileInputStream("D:
\\文件夹\\a.txt");
312FileOutputStreamfos=newFileOutputStream("D:
\\文件夹\\b.txt",true);
313byte[]buf=newbyte[1024];
314intlen=0;
315while(-1!
=len){
316fos.write(buf,0,len);
317len=fis.read(buf,0,buf.length);
318}
319fis.close();
320fos.close();
321}
322
323//输入流输出流带缓冲实现拷贝文件
324publicvoidexecute2()throwsException{
325FileInputStreamfis=newFileInputStream("D:
\\文件夹\\a.txt");
326BufferedInputStreambis=newBufferedInputStream(fis);
327FileOutputStreamfos=newFileOutputStream("D:
\\文件夹\\b.txt",true);
328BufferedOutputStreambos=newBufferedOutputStream(fos);
329byte[]buf=newbyte[1024];
330intlen=0;
331while(-1!
=len){
332bos.write(buf,0,len);
333len=bis.read(buf,0,buf.length);
334}
335//使用缓冲流一定要flush(),如果关闭流会自动flush()
336bis.close();
337bos.close();
338}
339}
DataOutputStream/DateInputStream读写数据
[java]viewplaincopy
340packagecom.itlwc;
341
342importjava.io.DataInputStream;
343importjava.io.DataOutputStream;
344importjava.io.FileInputStream;
345importjava.io.FileOutputStream;
346
347publicclassIODateInputStream{
348publicstaticvoidmain(String[]args)throwsException{