黑马程序员——Java基础--IO(一)

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

第一讲File类和递归

一、File概述

简单的说就是文件和目录路径名的抽象表示形式。

二、基本用法

package cn.itheima.iofile;

import java.io.File;

/*
 * static String pathSeparator()
 * 与系统有关的路径分隔符,为了方便,它被表示为一个字符串
 * static String separator() 
 * 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串  
 */
public class FileDemo {
	public static void main(String[] args) {
		// File 静态成员变量,名称分隔符
		String s = File.separator;
		System.out.println(s);
		// File 静态成员变量,路径分隔符
		String p = File.pathSeparator;
		System.out.println(p);
	}
}
结果:

\
;

package cn.itheima.iofile;

import java.io.File;
import java.io.IOException;

/*
 * File类创建功能
 *   创建文件,创建文件夹
 */
public class FileDemo2 {
	public static void main(String[] args)throws IOException {
		method();
		method_1();
		method_2();
		method_3();
	}
	/*
	 * 创建文件
	 * boolean createNewFile()
	 * 创建的是,File构造方法中封装的文件
	 * 如果文件存在,就不在创建
	 */
	public static void method() throws IOException{
		//创建File对象,封装一个文件
		File f = new File("d:\\x");
		//调用方法createNewFile,创建文件
		boolean c = f.createNewFile();
		System.out.println(c);
	}
	/*
	 * 创建文件夹
	 * boolean mkdir()
	 * 创建文件夹,创建的是File构造方法中封装的文件夹
	 * 如果文件夹存在,就不创建了 
	 * boolean mkdirs() 创建多级文件夹
	 */
	public static void method_1(){
		//创建File对象,封装一个文件夹
		File f = new File("d:\\a");
		boolean m = f.mkdirs();
		System.out.println(m);
	}
	/*
	 * boolean delete()
	 * 删除File构造方法中,封装的文件,或者是文件夹
	 * 删除有风险,操作需谨慎
	 * 不走回收站,直接彻底删除
	 */
	public static void method_2(){
		//创建File对象,封装一个文件
		File f = new File("d:\\a");
		//调用方法delete()
		boolean d = f.delete();
		System.out.println(d);
	}
	/*
	 * boolean renameTo(File dest) 
	 * File类的对象调用
	 *   源文件,修改后的文件
	 *   源文件封装File对象,修改后的文件封装成File对象
	 *   
	 * 修改后,路径变了,方法带有剪切效果
	 */
	public static void method_3() throws IOException{
		//创建File对象,封装成一个文件
		File f = new File("d:\\b");
		//通过createNewFile创建一个文件
		f.createNewFile();
		//创建File对象,封装成一个文件
		File f1 = new File("d:\\c");
		boolean r = f.renameTo(f1);
		System.out.println(r);
	}
}

结果:

true
true
true
true

package cn.itheima.iofile;

import java.io.File;

/*
 * File类构造器
 *   三种重载形式,必须全熟练
 */
public class FileDemo1 {
	public static void main(String[] args) {
		method();
		method_1();
		method_2();
	}
	/*
	 * 第一种构造方法
	 *  File(String pathname) 传递字符串的路径,可以是指到文件夹,文件也行
	 *  将这个路径,封装成File类的对象
	 *  封装路径,有没有,不管
	 */
	public static void method(){
		//将这个路径,封装成File类的对象
		File f = new File("c:\\EA.java");
		System.out.println(f);
	}
	/*
	 * 第二种构造方法
	 *   File(String parent,String child)
	 *   传递字符串的父路径,字符串的子路径
	 *   灵活性更高,子,父 分开形式
	 */
	public static void method_1(){
		//传递字符串的父路径,字符串的子路径
		File f = new File("c:", "eclipse");
		System.out.println(f);
	}
	/*
	 * 第三种构造方法
	 *   File(File parent,String child)
	 *   传递File类型父路径,字符串子路径
	 *   第一个参数,父路径,是File类型,可以调用File类的方法
	 */
	public static void method_2(){
		//传递File类型父路径,字符串子路径
		File parent = new File("c:");
		File f = new File(parent, "eclipse");
		System.out.println(f);
	}
}

结果:

c:\EA.java
c:\eclipse
c:\eclipse

三、常用功能

1、判断功能

package cn.itheima.file;

import java.io.File;

/*
 * 判断功能
 * public boolean isDirectory()//判断此抽象路径名表示的文件是否是一个目录
	public boolean isFile()//测试此抽象路径名表示的文件是否是一个标准文件
	public boolean exists()//测试此抽象路径名表示的文件或目录是否存在
	public boolean canRead()//测试应用程序是否可以读取此抽象路径名表示的文件
	public boolean canWrite()//测试应用程序是否可以修改此抽象路径名表示的文件
	public boolean isHidden()//测试是否为隐藏文件
 */
public class FileDemo {
	public static void main(String[] args) {
		method();
		method_1();
		method_2();
		method_3();
		method_4();
		method_5();
	}
	public static void method(){
		//创建File对象,封装一个文件
		File f = new File("c:\\");
		//判断此抽象路径名表示的文件是否是一个目录
		boolean b = f.isDirectory();
		System.out.println(b);
	}
	public static void method_1(){
		//创建File对象,封装一个文件
		File f = new File("d:\\d.txt");
		//测试此抽象路径名表示的文件是否是一个标准文件
		boolean b = f.isFile();
		System.out.println(b);
	}
	public static void method_2(){
		//创建File对象
		File f = new File("c:\\");
		boolean b = f.exists();
		System.out.println(b);
	}
	public static void method_3(){
		//创建File对象
		File f = new File("d:\\d.txt");
		//是否可以读取此抽象路径名表示的文件
		boolean b = f.canRead();
		System.out.println(b);
	}
	public static void method_4(){
		//创建File对象
		File f = new File("d:\\d.txt");
		//是否可以修改此抽象路径名表示的文件
		boolean b = f.canWrite();
		System.out.println(b);
	}
	public static void method_5(){
		//创建File对象
		File f = new File("d:\\d.txt");
		//测试是否为隐藏文件
		boolean b = f.isHidden();
		System.out.println(b);
	}
}

true
true
true
true
true
true

2、基本获取功能


package cn.itheima.file;

import java.io.File;
import java.text.DateFormat;
import java.util.Date;

/*
 * 基本获取功能
	public String getAbsolutePath()//绝对路径名字符串,它与此抽象路径名表示相同的文件或目录 
	public String getPath()//将此抽象路径名转换为一个路径名字符串
	public String getName()//此抽象路径名表示的文件或目录的名称;如果路径名的名称序列为空,则返回空字符串
	public long length()//返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的
	public long lastModified()//返回此抽象路径名表示的文件最后一次被修改的时间。
 * 
 */
public class FileDemo1 {
	public static void main(String[] args) {
		method();
		method_1();
		method_2();
		method_3();
		method_4();
	}
	public static void method(){
		//创建File对象
		File f = new File("d:\\d.txt");
		//绝对路径名字符串,它与此抽象路径名表示相同的文件或目录
		String a = f.getAbsolutePath();
		System.out.println(a);
	}
	public static void method_1(){
		//创建File对象
		File f = new File("d:\\d.txt");
		//将此抽象路径名转换为一个路径名字符串
		String a = f.getPath();
		System.out.println(a);
	}
	public static void method_2(){
		//创建File对象
		File f = new File("d:\\d.txt");
		//此抽象路径名表示的文件或目录的名称
		String a = f.getName();
		System.out.println(a);
	}
	public static void method_3(){
		//创建File对象
		File f = new File("d:\\d.txt");
		//返回由此抽象路径名表示的文件的长度
		long a = f.length();
		System.out.println(a);
	}
	public static void method_4(){
		//创建File对象
		File f = new File("d:\\d.txt");
		//返回此抽象路径名表示的文件最后一次被修改的时间
		long a = f.lastModified();
//		SimpleDateFormat s = new SimpleDateFormat("yy:MM:dd HH:mm:ss");
		DateFormat s = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
		String format = s.format(new Date(a));
//		Date time = new Date(a);
		System.out.println(format);
	}
}

d:\d.txt
d:\d.txt
d.txt
8
2015年7月9日 下午06时24分21秒

3、高级获取功能

package cn.itheima.file;

import java.io.File;

/*
 * 高级获取功能
	public String[] list()//返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
	public File[] listFiles() //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
 */
public class FileDemo2 {
	public static void main(String[] args) {
		method();
		method_1();
	}
	public static void method(){
		//创建File对象
		File f = new File("d:");
		//返回一个字符串数组
		String[] list = f.list();
		//遍历数组并打印
		for (String s : list) {
			System.out.println(s);
		}
	}
	public static void method_1(){
		//创建File对象,封装一个路径
		File f = new File("d:");
		//调用listFiles()
		File[] l = f.listFiles();
		//遍历数组并打印
		for (File file : l) {
			System.out.println(file);
		}
	}
}

$RECYCLE.BIN
2014公务员行测【智博】
360Rec
BaiduYunDownload
Config.Msi
d.txt
Java
JAVAAndroid
KuGou
Media
MyDrivers
pagefile.sys
Program Files
Program Files (x86)
QMDownload
QQPCMgr
RECYCLER
System Volume Information
UI学习
update
其他软件
娱乐软件
学习软件
手机软件
系统版本
酷派大神F1
d:\$RECYCLE.BIN
d:\2014公务员行测【智博】
d:\360Rec
d:\BaiduYunDownload
d:\Config.Msi
d:\d.txt
d:\Java
d:\JAVAAndroid
d:\KuGou
d:\Media
d:\MyDrivers
d:\pagefile.sys
d:\Program Files
d:\Program Files (x86)
d:\QMDownload
d:\QQPCMgr
d:\RECYCLER
d:\System Volume Information
d:\UI学习
d:\update
d:\其他软件
d:\娱乐软件
d:\学习软件
d:\手机软件
d:\系统版本
d:\酷派大神F1

4、文件过滤器

package cn.itheima.file;

import java.io.File;
import java.io.FileFilter;

/*
 * 文件过滤器
 *  实现接口 FileFilter接口
 *  重写抽象方法accept
 */
public class MyFilter implements FileFilter {
	//重写抽象方法accept
	public boolean accept(File pathname) {
		return pathname.getName().toUpperCase().endsWith(".jpg");
	}
}

package cn.itheima.file;

import java.io.File;

/*
 * 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
 * 
 */
public class FileDemo3 {
	public static void main(String[] args) {
		method();
	}
	public static void method(){
		//创建File对象,封装一个路径
		File f = new File("C:\\Users\\Mark C\\Documents\\CFSystem");
		File[] l = f.listFiles(new MyFilter());
		for (File file : l) {
			System.out.println(file);
		}		
	}
}

四、递归概述

    简单的说就是编程的手法而已,自己调用自己。
    注意事项:有出口,次数不能过多,导致内存溢出,构造方法不能使用递归;

    使用场景:当你实现一个功能的时候,发现功能有一个特性,方法的主题运算不不变,每次运行的时候,参与计算的参数不同。

示例1、


package cn.itheima.digui;
/*
 * 
 * 递归解决问题的思想
		找到出口
		找到规律
	例子:1-100的和
 * 		100+(100-1)=199
 * 		199+(99-1)=
 */
public class DiGuiDemo {
	public static void main(String[] args) {
		int i = method(100);
		System.out.println(i);
		System.out.println(method_1(100));
	}
	public static int method(int sum){
		//定义一个变量
		if (sum==1) {
			return 1;
		}
		return sum+method(sum-1);
	}
	public static int method_1(int sum){
		int x=0;
		for (int i = 1; i <= sum; i++) {
			x+=i;
		}
		return x;
	}
}

5050
5050

示例2、

package cn.itheima.digui;
/*
 * 不死兔子
 *   有1对兔子,第一月不生,第二个月不生,从第三个月开始,每月生下一对小兔子
 *   生下来的小兔子,第一月不生,第二个月不生,从三个月开始每月生下一对小兔子.
 *   假定,所有的兔子都不死,1年后,一共有多少对兔子  144
 *   斐波那契数列
 *   从第三项开始,后面一项是前面两项的和
 *   1 1 2 3 5 8 13 21 34 55  89  144
 *   
 *   第n项 = 第n-1 + 第n-2
 *   当n>2的时候
 *   数组的长度=12
 *   0 1 
 *   1 1
 *   2 arr[x-1] + arr[x-2]
 */
public class DiGuiDemo1 {
	public static void main(String[] args) {
		int i = method(12);
		System.out.println(i);
	}
	public static int method(int month){
		if (month==1) {
			return 1;
		}
		if(month==2){
			return 1;
		}
		return method(month-1)+method(month-2);
	}
}

144

示例3、

package cn.itheima.digui;

import java.io.File;

/*
 * 利用方法的递归调用
 * 实现遍历一个目录下的全部内容,子路径
 */
public class GetAllDir {
	public static void main(String[] args) {
		//创建File文件对象
		File f = new File("d:\\abc");
		//遍历
		method(f);
		method_1(f);
	}
	public static void method(File f){
		System.out.println(f);
		//调用listFiles方法获取文件下的目录
		File[] list = f.listFiles();
		for (File file : list) {
			//判断该文件目录是否为空
			if (file.isDirectory()) {
				//方法递归调用,获取到的目录,传递进来
				method(file);
			}else{
				System.out.println(file);
			}
			
		}	
	}
	/*
	 * 定义方法,实现删除目录
	 * 删除哪个目录,传递过来
	 * 方法需要谨慎
	 */
	public static void method_1(File f){
		System.out.println(f);
		//调用listFiles方法获取文件下的目录
		File[] list = f.listFiles();
		for (File file : list) {
			if (file.isDirectory()) {
				method_1(file);
			}else{
				file.delete();
			}
		}
		f.delete();
	}
}

注意:删除需谨慎!

-----------android培训java培训、java学习型技术博客、期待与您交流!------------



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值