修改文件扩展名(将.txt修改为.java)
第一步:点击文件夹
第二步:点击查看选项
第三步:在“文件扩展名”选项前打√
第四步:点击要修改文件,点击“重命名”,将文件名改为“.java”的形式
递归遍历文件夹下面的目录
字符流就是操作文件
IO
对文件内容进行读取或者复制粘贴
根据数据的流向分为:“input”和"output"
input:输入流 读
把数据从其他设备读取到内存中的流。
output:输出流 写
把数据从内存读取到其他设备上的流。
根据数据的类型分为:字节流和字符流
字节流:以字节为单位 读取数据的流
字符流:以字符为单位 读取数据的流
顶级父类
字节输入流:InputStream
字节输出流:OutputStream //是抽象类 不能new对象 FileOutputStream是其子类
字符输入流:Reader
字符输入流:Writer
OutputStream字节输出流
创建 字节输出流对象(2种方式)
//方式一
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt");
//方式二
File file=new File("D:\\java\\javacto\\aa.txt");
FileOutputStream fos1=new FileOutputStream(file);
//考虑向FileOutputStream()传值,但是还没有传值
//把鼠标放在new FileOutputStream()上 按住ctrl点鼠标左键 就会显示所有含参方法
对文件执行写操作(write(int b))方法
三步走
//1.创建FileOutputStream对象
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt");
//2.执行写操作
fos.write(97);//写入第一个字节
fos.write(98);
fos.write(99);
fos.write(100);
//关闭字节流
fos.close();
运行截图:
将字符串转为字符数组写入字符输出流
//1.创建字符输出流对象
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt");
//2.将字符串转为字符数组
byte[] b="我在跟老师学IO";
//3.将字符数组写入字符输出流
fos.write(b);
//4.关闭流
fos.close();
运行截图
将字符数组指定字符写入字符输入流
//1.创建 字符输入流
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt");
//2.将字符串转为字符数组
byte b[]="abcdefg".getBytes();
//3.将字符cd写入 字符输入流
fos.write(b,2,2);
//写write(byte[] b,int off从索引几开始,int len总共写几个)
//关闭流
fos.close();
运行截图:
向文件中写入内容保证不将之前的值覆盖
在文件路径名后加true
//1.创建 字节输入流对象
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt",true);
//2.将字符串转为字符数组
byte[] b="不覆盖之前的值".getBytes();
//3.将数组的全部内容 写入字符输入流中
fos.write(b,0,b.length);
//4.关闭流
fos.close();
运行截图:
将写入内容并换行
//1.创建字符输出流对象
FileOutputStream fos=new FileOutputStream("D:\\java\\javacto\\aa.txt");
//2.创建字符数组
byte[] b={97,98,99};
//3.将输入的字符数组输入并换行
for(int i=0;i<b.length;i++){
fos.write(b[i]);
fos.write("\r".getBytes());\\换行
}
//4.关闭流
fos.close();
运行截图
InputStream字节输入流
//1.创建字节输入流对象
FileInputStream fis=new FileInputStream("D:\\java\\javacto\\aa.txt");
//注:文件中只有abcd四个字符
//2.读取数据
int read=fis.read();//每次读取一个字节
System.out.print(read);//将数字转为字符 输出
read=fis.read();
System.out.print((char) read);
read=fis.read();
System.out.print((char) read);
read=fis.read();
System.out.print((char) read);
read=fis.read();//读第5个 请问还有没有值?没有 返回-1 最后不能有空格或者回车
System.out.print(read);
//注:最后以int形式输出
循环遍历输出字符
//1.创建FileInputStream字节输入流对象 就是读
FileInputStream fis=new FileInputStream("D:\\java\\javacto\\aa.txt");
//2.定义变量
int b;
//3.循环遍历
while((b=fis.read)!=-1){
System.out.print((char)b);
}
//4.关闭流
fis.close();
运行截图
将字符以规定长度输出
//1.创建字符输入流对象
FileInputStream fis=new FileInputStream("D:\\java\\javacto\\aa.txt");
//2.定义变量
int len;
byte[] b=new byte[2];
//3.循环遍历
while((len=fis.read(b))!=-1){//每次读取2个字符
//每次读到后 将字符串转为数组
System.out.println(b);
}
运行截图
复制文件(什么文件都可以)
//1.创建输入流 用来读取数据
FileInputStream fis=new FileInputStream("D:\\java\\javacto\\原图.jpg");
//2.创建输出流 用来写数据
FileOutputStream fis=new FileOutputStream("D:\\java\\javacto\\copy.jpg");
//3.定义长度
int length;
//定义数组
byte[] b=new byte[1024];
//循环遍历
while((len=fis.read(b))!=-1){
//写
fos.write(b,0,len);
}
//4.释放资源
fos.close();
fis.close();
运行截图
字符流
专门用来处理 文本文件
解决字节流 读取文本文件遇到中文字符可能不会显示完整字符 问题
字符输入流Reader
//1.创建字符输入流 读取数据
FileReader fr=new FileReader("D:\\java\\javacto\\aa.txt");
int len;//定义长度
//2.循环遍历
while ((len=fr.read())!=-1){
System.out.println((char) len);
}
//3.释放资源
fr.close();
运行截图:
//1.创建 字符输入流 读取数据
FileReader fr=new FileReader("D:\\java\\javacto\\aa.txt");
int len;//定义长度
char c[]=new char[1024];
//2.循环遍历
while ((len= fr.read(c))!=-1){
//System.out.println((char) len);
//如果每次读取多个,输出 就不能把值赋值到char
System.out.println(new String(c,0,len));
}
//4.释放资源
fr.close();
运行截图: