==============================================================================================
递归----方法调用
File类的对象<----->本地硬盘文件
查看属性
创建新的文件 新的文件夹
查看父元素目录
文件夹的遍历 删除
file对象不能操作文件中的内容-------->通过流I/O的方式来完成
============================================================================================
流按照方向(功能)来区分
in(读取) out(写入)
操作的目标来区分
文件流 数组流 字符串流 数据流 对象流 网络流。。。。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
学习文件流--->
顾名思义 读取文件中的信息in 将信息写入文件中out
文件流按照读取或写入的单位(字节数)大小来区分
字节型文件流(1字节)
FileInputStream/FileOutputStream
字符型文件流(2字节--1字符)
FileReader/FileWriter
容器
1.变量 只能存一份
2.数组 存储好多个 数据类型统一
3.集合 存储好多个 存储后个数还能改变 泛型---数据类型统一
如上三个都是Java中的类型(对象-->内存)
都存储在内存中 程序执行完毕 虚拟机停止的时候 内存空间就回收啦
数据都是临时性存储的
----------------------------
4.文件 存储好多信息
文件是存储在硬盘上的--->永久性保存
数据虽然是安全了
文件毕竟不在内存中 需要通过IO操作文件 JDBC
字节型文件输入流
FileInputStream
1.包 java.io
2.了解一下继承关系 InputStream类 字节型输入流的父类
3.创建对象
调用一个带File类型的构造方法
调用一个带String类型的构造方法
4.常用方法
int code = read(); 每次从流管道中读取一个字节 返回字节的code码
*int count = read(byte[] ) 每次从流管道中读取若干个字节 存入数组内 返回有效元素个数
int count = available(); 返回流管道中还有多少缓存的字节数
skip(long n) 跳过几个字节 读取
多线程--->利用几个线程同时读取文件
10000字节 5个小人同时读取
1-2000 2001-4000 4001-6000 6001-8000 8001-10000
D当做服务器 E当做客户端
*close() 将流管道关闭---必须要做 最好放在finally里 注意代码的健壮性 判断严谨
字节型文件输出流
FileOutputStream 将数据写入文件中
1. java.io
2.继承OutputStream 所有字节型输出流的父类
3.创建对象
调用一个带File参数 还有File boolean重载
调用一个带String参数 还有String boolean重载
4.常用方法
write(int code); 将给定code对应的字符写入文件 '='
write(byte[]) 将数组中的全部字节写入文件 getByte()
flush(); 将管道内的字节推入(刷新)文件
close(); 注意在finally中关闭
小任务
1.设计一个方法 文件的复制
C://test//aaa.txt-------> D://某一个位置
找到C盘中的源文件 内容读一遍
去D盘中创建一个新文件 将内容写进去
2.扩展设计一个方法 文件的加密/解密
读取内容
中间做一个小算法(加密) 可逆的
写进去
*3.扩展设计一个方法 文件夹的复制
配合着递归
配合着流
==============================================================================================
package CopyFiles;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class copyFile {
public void copyfile(File filename,String Path){
String oldFilePath = filename.getAbsolutePath();
String newFilePath = Path+oldFilePath.split(":")[1];
File newFile = new File(newFilePath);
File[] files = filename.listFiles();
if(files!=null){
newFile.mkdir();
if(files.length!=0){
for(File f:files){
copyfile(f,Path);
}
}
}else{
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try{
fileInputStream = new FileInputStream(filename);
fileOutputStream = new FileOutputStream(newFile);
int index = fileInputStream.read();
while(index!=-1){
fileOutputStream.write(index);
fileOutputStream.flush();
index = fileInputStream.read();
}
}catch (IOException e){
e.printStackTrace();
}finally {
try{
fileInputStream.close();
}catch (IOException e){
e.printStackTrace();
}
try{
fileOutputStream.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
public void Deletefile(File filename){
File[] files = filename.listFiles();
if(files!=null&&files.length!=0){
for(File f:files){
Deletefile(f);
f.delete();
}
}
else{
filename.delete();
}
}
public static void main(String[] args) {
copyFile copy = new copyFile();
File file = new File("D:\\text");
copy.Deletefile(file);
//copy.copyfile(new File("C:\\Dev-Cpp"),"D:");
}
}
==============================================================================================
字符型文件流
FileReader FileWriter
只能操作纯文本文件(文件右键打开方式 记事本打开 能看懂)
.txt
FileReader
1.java.io包
2.继承 InputStreamReader Reader
3.构造方法
4.常用
read()
read(char[])
FileWriter
1.java.io包
2.继承 OutputStreamWriter Writer
3.构造方法
带file参数 带file,boolean参数
带String参数 带String,boolean参数
4.常用
write(int)
write(char[])
write(string)
flush close
FileInputStream/FileOutputStream
FileReader/FileWriter
read write
================================================================================================
件夹的删除与遍历
package newtestfile;
import java.io.File;
public class NewTestFile {
//设计一个方法 用来展示(遍历)文件夹
// 参数-->file(代表文件或文件夹)
public void showFile(File file){//D://test文件夹
//判断如果file是一个文件夹 文件夹内有元素 找一个人先做
//获取file的子元素 files==null是个文件 files!=null是个文件夹 files.length!=0是一个带元素的文件夹
File[] files = file.listFiles();//test文件夹所有子元素
if(files!=null && files.length!=0){
for(File f:files){//每一个子元素都找人遍历
this.showFile(f);//循环第一次 test文件夹中的aaa 循环第二次 test->bbb 循环第三次 Test.txt
}
}
//做自己的显示(file是文件或file是一个空的文件夹)
System.out.println(file.getAbsolutePath());
}
//设计一个方法 删除文件夹
// 参数 file
public void deleteFile(File file){
//判断file不是空文件夹 找人先做事
File[] files = file.listFiles();
if(files!=null && files.length!=0){
for(File f:files){
this.deleteFile(f);
}
}
//删除file (file是个文件或file是一个空文件夹)
file.delete();
}
public static void main(String[] args){
NewTestFile ntf = new NewTestFile();
File file = new File("D://test");
ntf.deleteFile(file);
//ntf.showFile(file);
}
}