java学习---IO流

Collections工具类:
Collections.sort静态方法,对List集合,进行升序排列
Collections.binarySearch(list,元素)
Collections.shuffle(list)
File类创建文件方法
createNewFile()创建文件,如果已经存在就返回false
mkdir()创建文件夹
File file =new File("c:\\abc");
boolean b = file.mkdir();
System.out.println(b);
mkdirs()创建多级目录
delete()删除的文件或者是文件夹,在File构造方法中给出,删除方法不走回收站,直接从硬盘中删除

File类的获取功能,getName()返回路劲中表示的文件或者文件名

File file = new File("d:\\eclipseJavaEE\\eclipse\\eclipse.exe");
String name = file.getName();
System.out.println(name);

获取路劲中最后一个的名字,要么是文件名要么是文件

File类获取功能,long length()返回路径中表示的文件的字节数

getAbsolutePath()返回String对象
getAbsoluteFile()返回File对象
File file = new File("src");
File absolute = file.getAbsoluteFile();
System.out.println(absolute);

如果写的是一个相对路径,那么找的是绝对位置工程根目录

getParentFile():
File file = new File("d:\\eclipse\\eclipse.exe");
File parent = file.getParentFile().getParentFile().getParentFile();
System.out.println(parent);

exists()判断file构造方法中封装的路径是否存在

File file = new File("src");
boolean b = file.exists();
System.out.println(b);
返回true

boolean isDirectory():判断是否是目录

File file = new File("d:\\eclipseJavaEE\\eclipse.exe");
if(file.exists()){
	boolean b = file.isDirectory();
	System.out.println(b);
}
file类的获取功能:

String[] list():获取到File构造方法中的封装的路径中的文件和文件夹名(遍历一个目录)

File file = new File("f:");
		String[] strArr = file.list();
		System.out.println(strArr.length);
		for(String str:strArr){
			System.out.println(str);
		} 

listFiles():返回目录或者文件的全路径
listRoots():返回根目录盘符
文件过滤器:
使用listFiles(FileFilter filter)

递归求和:

public static int getSum(int n){
	if(n==1){
		return 1;
	}
	return n+getSum(n-1)
}

递归求阶乘:

public static int getJieCheng(int n){
	if(n==1){
		return 1;
	}
	return n*getJieCheng(n-1);
}

斐波那契数列:

public static int getFBNQ(int month){
		if(month ==1){
			return 1;
		}
		if(month==2){
			return 1;
		}
		return getFBNQ(month-1)+getFBNQ(month-2);
	}

获取文件夹下所有以".java"为后缀的文件

test.java
public static void main(String[] args) {
		File pathname = new File("c:\\demo");
		getAllDir(pathname);
	}
	public static void getAllDir(File dir){
//		System.out.println(dir);
		File[] f = dir.listFiles(new testFilter());
		for(File files:f){
			if(files.isDirectory()){
				getAllDir(files);
			}else {
				System.out.println(files);
			}
		}
	}
testFilter.java
public class testFilter implements FileFilter {
	public boolean accept(File pathname){
		if(pathname.isDirectory()){
			return true;
		}else{
			return pathname.getName().toLowerCase().endsWith(".java");
		}
		
	}
}

字节输出流:
OutputStream()

字节输入流:
InputStream()
使用InputStream()读取文件内容

FileInputStream fis = new FileInputStream("c:\\1.txt");
byte[] b = new byte[1024];
int len = 0;
while((len=fis.read(b))!=-1){
	System.out.print(new String(b,0,len));
}
fis.close();

文件复制:

FileInputStream fis = null;
FileOutputStream fos = null;
try {
	fis = new FileInputStream("c:\\1.txt");
	fos = new FileOutputStream("d:\\a.txt");
	int len = 0;
	while((len=fis.read())!=-1){
		fos.write(len);
	}
} catch (IOException ex) {
	System.out.println(ex);
	throw new RuntimeException("文件复制失败");
}finally {
	try {
		if(fos!=null)
			fos.close();
	} catch (IOException ex) {
		throw new RuntimeException("释放资源失败");
	}finally {
		try {
			if(fis!=null)
				fis.close();
		} catch (IOException e) {
			throw new RuntimeException("释放资源失败");
		}
	}

上面的复制速度非常慢,为了提高效率我们采用数组缓冲的方法

FileInputStream fis = null;
FileOutputStream fos = null;
try{
	fis = new FileInputStream("c:\\t.zip");
	fos = new FileOutputStream("d:\\t.zip");
	//定义字节数组,缓冲
	byte[] bytes = new byte[1024];
	//读取数组,写入数组
	int len = 0;
	while((len=fis.read())!=-1){
		fos.write(bytes,0,len);
	}
}catch(IOException ex){
	System.out.println(ex);
	throw new RuntimeException("文件复制失败");
}finally{
	try{
		if(fos!=null)
			fos.close();
	}catch(IOException ex){
		throw new RuntimeException("释放资源失败");
	}finally{
		try{
			if(fis!=null)
				fis.close();
		}catch(IOException ex){
			throw new RuntimeException("释放资源失败");
		}
	}
}
字符输出流写文本FileWriter类
 写的方法write
 write(int c)写一个字符
 write(char[] c)写字符数组
 write(char[] c,int,int)写入字符数组一部分,包含开始索引和写几个
 write(String s)写入字符串
 Writer类的子类对象FileWriter

Reader类:专门读取文本文件
read()读取一个字符
read(char[] c)读取字符数组
由于Reader类是抽象类,需要使用子类FileReader类

字符流复制文本文件,必须文本文件
FileReader读取数据源
FileWriter写入到数据目的
FileReader fr = null;
FileWriter fw = null;
try{
	fr = new FileReader("c:\\1.txt");
	fw = new FileWriter("d:\\1.txt");
	char[] cbuf = new char[1024];
	int len=0;
	while ((len=fr.read(cbuf))!=-1) {
		fw.write(cbuf,0,len);
		fw.flush();
	}
}catch(IOException ex){
	System.out.println(ex);
	throw new RuntimeException("复制失败");
}finally{
	try{
		if(fw!=null)
			fw.close();
	}catch(IOException ex){
		throw new RuntimeException("释放资源失败");
	}finally{
		try{
			if(fr!=null)
				fr.close();
		}catch(IOException ex){
			throw new RuntimeException("释放资源失败");
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值