I/O流

File:文件,文件夹

  • 相对路径:里面有一个参照文件,通常参照当前的java工程文件
  • 绝对路径:Windows平台是指从盘符开始的路径

获取文件的绝对路径:getAbsolutePath()

URL:统一资源定位符
协议名://主机名:端口号/文件路径/文件名
https://www.w3school.com.cn:443/index.html
http: 超文本传输协议 默认端口号是80
https: http+SSL 安全套接 安全性更高 默认端口号443

URI:统一资源标识符
jdbc:mysql://localhost:3306/数据库名

DNS:域名解析服务器–>将网址解析成IP地址

文件字节输入流的使用

  • 1.准备好源文件
  • 2.创建文件字节输入流对象
  • 3.读取数据
  • 4.关闭资源

文件字节输出流的使用

  • 1.创建一个目标文件
  • 2.创建一个文件字节输出流对象
  • 3.写数据

文件字符输入流
FileReader
文件字符输出流
FileWriter

缓冲字符输入输出流
BufferedWriter
BufferedReader
在这里插入图片描述

使用字节输入流输出流实现文件的复制操作:

public static void main(String[] args) {
//准备好源文件和目标文件
File sf = new File(“4.jpg”);
File df = new File(“风景.jpg”);
//先将源文件读取到程序中,然后再写到目标文件
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//创建文件字节输出和输入流对象
fis = new FileInputStream(sf);
fos = new FileOutputStream(df);
//准备一个 缓冲字节数组
byte[]bs = new byte[100];
//先读取数据,在将读取的数据写到文件中
int len = fis.read(bs);
while (len!=-1) {
//将数组中读取的数据写到文件中
fos.write(bs, 0, len);
fos.flush();//刷流
len = fis.read(bs);//继续读取
}
System.out.println(“文件复制完毕!”);
} catch (Exception e) {
e.printStackTrace();
}finally{
//资源关闭遵循先进后出
try {
if (null!=fos) {
fos.close();
}
if (null!=fis) {
fis.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

*使用缓冲流实现文件的读取和写出操作

public class FileWriterDemo {
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
try {
//创建缓冲字符输入输出流
br = new BufferedReader(new FileReader(new File(“abc.txt”)));
bw = new BufferedWriter(new FileWriter(new File(“aaa.txt”)));
//边读边写的操作
String lines = br.readLine();
while (lines!=null) {
//将读取的字符串写到文件中
if (!lines.equals("\r\n")) {
bw.write(lines);
bw.newLine();//换行
bw.flush();//刷流–将内存中的数刷到文件中
}
lines = br.readLine();//循环读取
}
System.out.println(“读写完毕”);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if (bw!=null) {
bw.close();
}
if (br!=null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

递归
方法体中,存在自己调用自己就称之为递归
输出斐波拉切数列的第n项
斐波拉切数列:0 1 1 2 3 5 8 13 21
f(1) = 0 第一位
f(2) = 1 第二位
f(3) = f(1)+f(2)
f(4) = f(2)+f(3)

public class DiGui {
public static void main(String[] args) {
int f = fibo(40);//有栈针限制,调用太多次会报错
System.out.println(f);
}
//方法体中,存在自己调用自己就称之为递归
public static int fibo(int n){//n代表第多少位
if (n<=1) {
return 0;
}else if(n==2){
return 1;
}else{
return fibo(n-1)+fibo(n-2);
}
}
}

例:
统计代码行数 给一个文件目录,遍历该目录下的所有文件,如果是.java文件,利用字符流读取该java源文件,
统计全部java文件的代码共有多少行,java文件个数有多少
提示:先获取所有文件,如果文件名以java结尾则表示是Java文件。然后再计算所有Java文件的行数总 合,以及Java文件的个数。

public class Demo01 {
public static int count1;// 代表java文件个数
public static int count2;// 代表java文件代码行数
public static BufferedReader br;//

/**
 * 
 * @param path需要读取的文件路径
 * @throws Exception
 */
public static void listFiles(File f) {
	if (f.isFile()) {// 这个文件对象是一个文件
		String fn = f.getName();// 获取这个文件的名字
		if (fn.endsWith(".java")) {// 判断文件名是否以.java结束
			count1++;// java文件个数加1
			try {
				br = new BufferedReader(new FileReader(f));
				String msg = br.readLine();// 一次读取一行数据
				while (msg != null) {
					count2++;
					msg = br.readLine();// 循环读取
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (br != null) {
					try {
						br.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	} else {// 这个文件对象是一个文件夹
		File[] fs = f.listFiles();// 将目录中的所有文件展开到文件对象数组中
		for (File file : fs) {// file代表文件数组中的元素
			// 自己调用自己
			listFiles(file);
		}
	}
}

public static void main(String[] args) {
	File f = new File("D:\\lzh");
	try {
		listFiles(f);
	} catch (Exception e) {
		e.printStackTrace();
	}
	System.out.println("java文件个数是:" + count1 + ",java代码行数是:" + count2);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值