IO--文件与流

目录

1.IO的概念

 2.java IO的体系

 3.文件及其操作

 3.1 代码演示

3.1.2 实例:统计某一文件下的图片总数

4.IO流

4.1 示意图

 4.2 实例--字节流

4.3 实例--字符流

4.3.1  读出某一文件的内容--FileInputReader & FileInputStream

 4.3.2  读出某一文件的内容--FileReader

4.4 输出流--尾部追加问题

4.4.1 FileOutputStream()--向文件写入字符

4.4.2 使用FileWriter

5.try...with...resources


1.IO的概念

        IO的底层实现异常复杂,可以抽象为是对流(stream)的操作。

 2.java IO的体系

 3.文件及其操作

 3.1 代码演示

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

public class FileDemo {
	public static void main(String[] args) throws Exception {
		//指定抽象路径
		File file = new File("F:\\abc.txt");
		file.createNewFile();
		
		System.out.println("是否为文件夹:"+file.isDirectory());
		System.out.println("是否为文件:"+file.isFile());
		System.out.println("是否为隐藏文件:"+file.isHidden());
		System.out.println("最后一次修改时间:"+new Date(file.lastModified()));
		//file.getTotalSpace()--所占字节大小   /1024[KB]/1024[MB]/1024[G]
		System.out.println("获取该盘符的总空间大小:"+file.getTotalSpace()/1024/1024/1024+"G");
		System.out.println("获取该盘符的空闲空间大小:"+file.getFreeSpace()/1024/1024/1024+"G");
		
		//列出C盘下的所有目录+文件
		File f = new File("C:\\");
		File[] fs = f.listFiles();
		for (File f1 : fs) {
			//获取文件的名称
			System.out.println(f1.getName());
		}
		
		//删除文件  谨慎操作
		file.delete();
		
		System.out.println("文件是否存在:"+file.exists());
	}
}

执行结果如下图所示:

 

3.1.2 实例:统计某一文件下的图片总数

import java.io.File;

public class FileDemo02 {
	//统计图片的数量
	static int cnt = 0;
	
	//统计盘符中存在图片个数
	public static void find(File file) {
		//如果是文件
		if(file!=null && file.isFile()) {
			String fileName = file.getName();
			if(fileName.endsWith(".jpg" ) || fileName.endsWith(".png")) {
				cnt++;
//				System.out.println(fileName);
			}
			return;
		}
		//列出盘符下的所有文件
		File[] fs = file.listFiles();
		if(fs!=null) {
			for (File f1 : fs) {
				//递归调用
				find(f1);
			}
		}
	}
	
	public static void main(String[] args) {
		File file = new File("D:\\");
		find(file);
		System.out.println("图片数量:"+cnt);
	}
}

执行结果如下图所示:

4.IO流

4.1 示意图

 4.2 实例--字节流

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

public class OutputStreamDemo {

	public static void main(String[] args) throws IOException {
		File file = new File("F:\\drill.txt");
		OutputStream out = new FileOutputStream(file);
		out.write('z');
		out.close();
	}
}

 执行结果如下图所示:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;


public class InputStreamDemo {

	public static void main(String[] args) throws IOException {
		File file = new File("F:\\drill.txt");
		InputStream in = new FileInputStream(file);
		int n = 0;
		while((n=in.read()) != -1) {
			System.out.println((char)n);
		}
	}
}

4.3 实例--字符流

4.3.1  读出某一文件的内容--FileInputReader & FileInputStream

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputStreamDemo {
	
	public static void main(String[] args) {
		//获取当前线程的路径 -- bin/
		String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
		System.out.println(path);
		//当前项目路径名
		path = path.substring(0,path.length()-4);
		System.out.println(path);
		String fileName = path+"src/com/it/file/FileDemo02.java";
		
		//包装模式
		try {
			InputStreamReader r = 
					new InputStreamReader(new FileInputStream(fileName));
			int n = 0;
			while((n=r.read()) != -1) {
				System.out.print((char)n);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

执行结果部分代码如下所示:

 4.3.2  读出某一文件的内容--FileReader

import java.io.FileReader;
import java.io.Reader;

public class ReaderDemo {
	
	public static void main(String[] args) {
		String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
		path = path.substring(0,path.length()-4);
		String fileName = path+"src/com/it/file/FileDemo02.java";
		
		//try...with...resources
		try(Reader in = new FileReader(fileName);){
			int n = 0;
			while((n=in.read()) != -1) {
				System.out.print((char)n);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

 执行结果部分代码如下所示:

4.4 输出流--尾部追加问题

4.4.1 FileOutputStream()--向文件写入字符

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

public class outputStreamDemo {
	public static void main(String[] args) throws IOException {
		try(OutputStream out = new FileOutputStream("D:\\out.txt");) {
			out.write('x');
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
	}
}

 执行结果如下图所示:

4.4.2 使用FileWriter

  • FileWriter("",false)覆盖重写文件 
  • FileWriter("",true)在原文件内容进行追加             程
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class WriterDemo {

	public static void main(String[] args) throws IOException {
		Writer out = new FileWriter("D:\\out.txt");
        //追加
//      Writer out = new FileWriter("D:\\out.txt",true);
		out.write("test....");
		out.flush();
		out.close();
	}
}

执行结果如下图所示:

5.try...with...resources

        java一大特性就是JVM对内部资源实现自动回收,即垃圾回收机制,给开发者带来极大的便利。但是JVM对外部资源的引用无法自动回收,例如数据库连接,网络连接以及输入输出IO流等。因此,该类资源需要手动关闭,不然会导致资源泄露,连接池溢出以及文件被异常占用等。

try{
}catch(Exception e){
    //异常捕获
}finally{
    //关闭连接,释放资源
}

/*JDK1.7之后的try-with-resources关闭外部连接*/
try(Reader in = new FileReader(fileName);){
	int n = 0;
    while((n=in.read()) != -1) {
		System.out.print((char)n);
	}
}catch(Exception e) {
	e.printStackTrace();
}

从程序员的角度看:

用户就是一种在你执行read指令时进行输入的外设。

序员的角度看

用户就是一种在你执行read指令时进行输入的外设。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值