您的位置:首页 > 职场人生

黑马程序员——Java学习总结:IO常用方法练习

2015-07-20 19:09 411 查看
昨天写过了IO学习总结,还是感觉对知识掌握理解的不够透彻,今天特意进行的IO部分的练习,个人感觉还是写写代码、看代码、看注释、查API学习的比较快,并掌握的表牢靠。现将练习整理如下。路过高手请赐教。

File类常见方法练习:

package day21_IO;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileTest01 {

public static void main(String[] args) throws IOException {
//创建File实例的方法 1
File file=new File("E:\\abc\\abc.txt");
File file1=new File("E:\\abc\\mkdir");
//创建File实例的方法 2
File file2=new File("E:\\abc", "hello.txt");
File file3=new File("abc.txt");
File file4=new File("E:\\abc\\d\\e\\f");
//在多系统上扩展
File file5=new File("E:"+File.separator+"abc");
//File的常见操作方法:
//1.获取名称
String strName=file.getName();
System.out.println("名称:"+strName);
//2.获取大小
long fileSize=file.length();
System.out.println("大小:"+fileSize); //文件存在,返回文件长度,文件不存在,所以返回0
//3.获取类型
//因为类型不定,无法获取类型
//4.获取目录
String strParent=file.getParent();
System.out.println("目录:"+strParent);
//5.获取绝对路径
String strAbsolutePath=file3.getAbsolutePath();
System.out.println("绝对地址:"+strAbsolutePath);
//6.获取路径
String strPath=file3.getPath();
System.out.println("地址:"+strPath);
//7.获取最后一次修改时间
long lastModify=file.lastModified();
Date date=new Date(lastModify);
//      DateFormat df=DateFormat.getDateInstance(DateFormat.FULL);
//      String strDate=df.format(date);
//      System.out.println("上次修改的时间"+strDate);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); //自定义日期格式
String strDate=sdf.format(date);
System.out.println("上次修改的时间"+strDate);
//8.文件是否隐藏
boolean isHidden=file.isHidden();
System.out.println("隐藏"+isHidden);
//9.创建文件
boolean flag=file2.createNewFile(); //已经存在则不能创建,返回false,不存在创建,返回true
System.out.println("创建文件"+flag);
//10.删除文件
boolean flag1=file2.delete();
System.out.println("删除文件"+flag1);
//11.创建文件夹
boolean flag2=file1.mkdir();
System.out.println("创建文件:"+flag2);
//12.创建多级文件夹
boolean flag3=file4.mkdirs();
System.out.println("创建多级文件:"+flag3);
//13.删除文件夹
boolean flag4=file1.delete();
boolean flag5=file4.delete();   //删除时候必须保证文件夹下无内容
System.out.println("删除文件:"+flag4);
System.out.println("删除文件:"+flag5);
//14.getFreeSpace()  getTotalSpace() getUsableSpace()
File file14=new File("E:\\");
long freeSpace=file14.getFreeSpace(); //得到指定目录的可用空间
System.out.println(freeSpace);
long totalSpace=file14.getTotalSpace(); //得到指定目录的总共空间
System.out.println(totalSpace);
long usableSpace=file14.getUsableSpace(); //得到指定目录的已用空间
System.out.println(usableSpace);
//15.获取指定文件下文件和文件夹的名称
File file15=new File("E:\\");
String[] arrs=file15.list();
for(String str:arrs){
System.out.println("文件名:"+str);
}

File[]  arrayFile=file15.listFiles();
for(File f:arrayFile){
System.out.println("文件夹名:"+f);
}
//16.获得指定文件夹下的.txt文件
File file16=new File("E:\\");
getSuffix(file16,".txt");
//17.获得部分名称的文件
File file17=new File("E:\\");
getFileByPartOfName(file17,"hello");
//18.文件过滤器 FileFilter
File file18 = new File("E:\\");
File[] arrsfile=file18.listFiles(new MyFileFilter(".txt"));
for(File f:arrsfile)
System.out.println("FileFilter: "
4000
+f);

//19 获取指定目录下的内容,包含子目录下内容。 递归思想
File file19=new File("E:\\abc");
getFileFromDir(file19);

}

private static void getFileFromDir(File file19) {
File[] arrfile=file19.listFiles();
for(File file:arrfile){
if (file.isDirectory()) {
System.out.println("文件夹:"+file);
getFileFromDir(file);
}else {
System.out.println("文件:"+file);
}

}

}

private static void getFileByPartOfName(File file, String string) {
String[] arrs=file.list(new FilterByPartOfName(string));
for(String str:arrs){
System.out.println(string+"文件:"+str);
}

}

private static void getSuffix(File file,String string) {

String[] arrs=file.list(new FilterBySuffix(string));
for(String str:arrs){
System.out.println(".txt文件:"+str);
}
}

}

----------

package day21_IO;
/***
* FilenameFilter文件名过滤器
* 用于过滤文件名中包含的特定字符串的的文件
*/
import java.io.File;
import java.io.FilenameFilter;

public class FilterByPartOfName implements FilenameFilter
{
String name;

public FilterByPartOfName(String name) {
super();
this.name = name;
}

public boolean accept(File arg0, String arg1) {

return arg1.contains(name);
}
}

----------
package day21_IO;

import java.io.File;
import java.io.FilenameFilter;
/***
* 文件名过滤器,可用于过滤特定的文件类型。
* @author hsf
*
*/
public class FilterBySuffix implements FilenameFilter
{
String name;

/**
* @param name
*/
public FilterBySuffix(String name) {
super();
this.name = name;
}

public boolean accept(File arg0, String arg1) {

return arg1.endsWith(name);
}
}

----------
package day21_IO;

import java.io.File;
/***
* FileFilter 文件过滤器,既可以过滤文件,也可以过滤文件名,
* 过滤文件时使用File.getName().endwith(".txt");
* file.isFile();文件
* file.isDirectory(); 是文件夹
*/
import java.io.FileFilter;

public class MyFileFilter implements FileFilter {
String condition;

public MyFileFilter(String condition) {
super();
this.condition=condition;
}

public boolean accept(File passName) {

return passName.isDirectory();
}

}


代码运行自己需要修改File中的路径,指定为当前电脑上的路径。

需求:删除一个带内容的文件夹,内容可以是文件,也可是是文件夹。

分析:

1.指定file

2.如果文件夹中不空,文件夹是不允许删除的,所以必须先删除文件夹中的文件。

3.文件夹是嵌套的,需要使用递归的思想解决。

4.迭代过程中,是文件夹进行函数递归调用,不是文件夹进行删除,迭代到最后一个文件夹后,依次删除文件夹。

package day21_IO;

import java.io.File;
/***
* @author hsf
* 需求:删除一个带内容的文件夹,内容可以是文件,也可是是文件夹。
* 分析:1.指定file
*      2.如果文件夹中不空,文件夹是不允许删除的,所以必须先删除文件夹中的文件。
*      3.文件夹是嵌套的,需要使用递归的思想解决。
*      4.迭代过程中,是文件夹进行函数递归调用,不是文件夹进行删除,迭代到最后一个文件夹后,依次删除文件夹。
*/

public class FileTest02 {

public static void main(String[] args)  {
File dir=new File("E:\\a");
deleteFile(dir);
}
private static void deleteFile(File dir) {
File[] arrsFile=dir.listFiles();//获取文件夹中的内容,存储到File数组中,便于遍历。
for(File f:arrsFile){   //执行遍历
if (f.isDirectory()) {  //是文件夹进行迭代
deleteFile(f);
}else {
System.out.println("删除file:"+f.delete()); //不是文件夹进行删除
}
}
System.out.println("删除dir:"+dir.delete()); //删除文件夹
}
}


需求:

获取指定文件夹下的所有.txt文件,包括子文件夹。

思路分析:

1.包含子目录,用递归函数。

2.获取指定文件,用顾虑器FileFilter

3.迭代循环,若是文件夹,进行函数递归,若是文件使用过滤区过滤,添加到集合中。

package day21_IO;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/***
* 获取指定文件夹下的所有.txt文件,包括子文件夹。
* @author hsf
* 思路分析:
*  1.包含子目录,用递归函数。
*  2.获取指定文件,用顾虑器FileFilter
*  3.迭代循环,若是文件夹,进行函数递归,若是文件使用过滤区过滤,添加到集合中。
*
*/
public class Test03 {

public static void main(String[] args) {
//1.定义集合存储.txt文件
List<File> list=new ArrayList<File>();
//2.指定目录
File file=new File("E://A");
//3 .定义过滤器
MyFilterBySuffix filter=new MyFilterBySuffix(".txt");
recution(list,file,filter);
show(list);
}

//4 .定义递归函数
private static void recution(List<File> list,File file,MyFilterBySuffix filter){
File[] arrsFile=file.listFiles();
for(File f : arrsFile) {
if (f.isDirectory()) {
recution(list, f, filter);  //执行函数递归调用
}else {
filter.accept(f);   //进行过滤文件
list.add(f);
}
}
}
//输出list验证结果
private static void show(List<File> list){
for(File file:list){
System.out.println(file);
}
}
}


package day21_IO;

import java.io.File;
import java.io.FileFilter;
/***
* 定义文件夹过滤器
* @author hsf
*
*/
public class MyFilterBySuffix implements FileFilter {
String str=null;

/**
* @param str过滤条件
*/
public MyFilterBySuffix(String str) {
super();
this.str = str;
}

public boolean accept(File file) {
return file.getName().endsWith(str);
}

}


将数据写入文件中,并处理异常!

package day21_IO;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
* 将数据写入文件中,并处理异常
* 步骤:
* 1 指定目录
* 2 创建字节输出流
* 3 调用字节输出流写的功能
* 4 释放资源
*
* 注意 异常的处理
* @author hsf
*
*/
public class OutputStream_Test01 {

public static void main(String[] args) {
//1 指定目录
File dir=new File("E://ab");
if (!dir.exists()) {
dir.mkdir();
}
FileOutputStream fos=null;
try {
//2 创建字节输出流,必须指出输出流目的地。可能存在文件不存异常FileNotFoundException,原因:该文件被系统保护,不能访问。该文件是一个目录,无法写入
fos=new FileOutputStream("E://ab//fos.txt");
//3 调用字节输出流写功能,可能存在的写入失败异常,例如硬盘写满没有空间。
fos.write("abcdefg".getBytes());

}  catch (IOException e) {
System.out.println(e.toString()+"----");
}finally{
if (fos!=null) {
try {
fos.close();
} catch (IOException e) {
throw new RuntimeException(""+e);
}
}
}
}
}


练习完成,分析注释都比较详细。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  io流 异常处理 file