
存储和读写数据的方案File和IO流像变量数组对象集合这些数据容器都在内存中一旦程序结束或者断电数据就没了,File是存在硬盘里的IO流用于读写数据可以读写文件或网络中的数据1.创建File对象获取文件信息public static void main(String[] args) { //1.创建File对象,获取文件的信息 File f1new File(D:\\baidu); System.out.println(文件名:f1.getName()); System.out.println(文件绝对路径:f1.getAbsolutePath()); System.out.println(文件是否存在:f1.exists()); System.out.println(文件是否可读:f1.canRead()); System.out.println(文件是否可写:f1.canWrite()); System.out.println(文件大小:f1.length()); System.out.println(文件是否隐藏:f1.isHidden()); System.out.println(文件是否是目录:f1.isDirectory()); System.out.println(文件是否是普通文件:f1.isFile()); System.out.println(文件最后修改时间:f1.lastModified()); }2.绝对路径带盘符:D:\baidu相对路径不带盘符默认是工程下的文件 FileAndIO\src\file01File f2new File(FileAndIO\\src\\file01); System.out.println(文件名:f2.getName()); System.out.println(文件大小f2.length());3.创建不存在的文件路径File f3new File(D:\\aaa.txt); System.out.println(f1.exists());//判断文件是否存在 f3.createNewFile();//创建文件,抛出异常因为有时候没有相对应的盘符 File f4new File(D:\\aaa);//创建目录 f4.mkdir(); File f5new File(D:\\aaa\\bbb);//创建多级目录 f5.mkdirs();4.删除delete只能删除空文件f4.delete();5.获取某个目录下的全部一级文件名称File f6new File(D:\\); String[] namesf6.list();//获取目录下的文件名称 for(String name:names){ System.out.println(name); } File[] filesf6.listFiles();//获取一级文件对象到数组中 for(File file:files){ System.out.println(file.getAbsoluteFile());//获取绝对路径 }6.规律化的递归满足1.递归公式2.递归终结点3.递归方向void main() { /* * 猴子吃桃每天吃走一半的桃子又忍不住吃了一个吃了十天只剩下一个 问你第一天有多少个桃子 * 递归公式f(n-1)f(n)-f(n)/2-1 * 2f(n-1)2f(n)-f(n)-2 * f(n)2f(n)-2f(n-1)-2 * * 递归终结点f(10)1 * * 递归方向 * */ } public static int eat(int n){ if(n10){ return 1; }else { return 2*eat(n)-2*eat(n-1)-2; } }7.文件搜索import java.io.File; public class Filedemo2 { static void main() { //目标找出D盘下的QQ.exe文件 File dirnew File(D:\\); searchFile(dir,QQ.exe); } /** * * param dir 目录 * param fileName 文件名 */ static void searchFile(File dir,String fileName){ //1.判断目录是否存在,是否为空 if(!dir.exists()||dirnull||dir.isFile()){ return; } //2.获取一级文件对象 File[] filesdir.listFiles(); //3.判断一级文件是否存在是否有权限 if(files!nullfiles.length0){//null代表权限无权限就是null并且文件不能为空 //4.遍历一级文件对象 for(File file:files){ if(file.getName().equals(fileName)){ System.out.println(找到文件file.getAbsolutePath()); } } //5.递归调用 for(File file:files){ searchFile(file,fileName); } } } }8.IO流I:input,称为输入流负责把数据读到内存中去O:output,称为输出流负责写数据出去分类按照流的方向——输入流输出流按流的内容——字节流 ——适合操作所有类型的文件音频图片文本复制转移字符流——只适合文本读写Java文件txt字节输入流InputStream——抽象类——实现类在前面加File字节输出流OutputStream字符输入流Reader字符输出流Writer汉字占三个字节读取时注意乱码FileInputStream用法按字节读取文件内容适合复制import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class FileInputStreamdemo { static void main() throws IOException { //目标:掌握文件字节输入流读取文件中的字节数组到内存来 //1.创建文件字节输入流对象 InputStream isnew FileInputStream(FileAndIO\\src\\file01); //2.读取文件中的字节数组到内存来 byte[] buffernew byte[1024];//设置一个足够大的数组一次性读取的更多 int len;//记录每次读取的字节数 while((lenis.read(buffer))!-1){ String strnew String(buffer,0,len); System.out.println(str); } } }import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class FileInputStreamdemo2 { static void main() throws IOException { InputStream isnew FileInputStream(FileAndIO\\src\\file01); byte[] bytesis.readAllBytes();//一次性读取文件中的所有字节适合小文件 System.out.println(new String(bytes)); } }FileOutStream用法按字节写入文件内容import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class FileOutputStreamdemo { static void main() throws IOException { // OutputStream osnew FileOutputStream(FileAndIO\\src\\file02.txt);//写入文件不需要事先建立文件 OutputStream osnew FileOutputStream(FileAndIO\\src\\file02.txt,true);//true表示追加写入 //写入一个字节 os.write(97); os.write(\r\n.getBytes()); //写入一个字节数组 os.write(hello.getBytes()); //换行 os.write(\r\n.getBytes()); os.write(我爱你.getBytes()); os.write(\r\n.getBytes()); //关闭流 os.close(); } }复制D盘文件到E盘import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyDemo { static void main() { //源文件D:\photo\1.jpg // 目标文件E:\photo\1.jpg try { copyFile(D:\\photo\\1.jpg,E:\\1.jpg); } catch (Exception e) { e.printStackTrace(); } } //复制文件 static void copyFile(String src,String dst) throws IOException { //创建字节输入流管道 FileInputStream fis new FileInputStream(src); //创建字节输出流管道 FileOutputStream fos new FileOutputStream(dst); //读取源文件内容 int len 0; byte[] bytes new byte[1024]; while ((len fis.read(bytes)) ! -1) { fos.write(bytes,0,len); } //关闭流 fis.close(); fos.close(); } }更好的释放资源的方法import java.io.FileInputStream; import java.io.FileOutputStream; public class CopyDemo { static void main() { //源文件D:\photo\1.jpg // 目标文件E:\photo\1.jpg copyFile(D:\\photo\\1.jpg,E:\\1.jpg); } //复制文件 static void copyFile(String src,String dst) { try (//只能放资源对象结束后会关闭流 FileInputStream fis new FileInputStream(src); FileOutputStream fos new FileOutputStream(dst)) { //读取源文件内容 int len 0; byte[] bytes new byte[1024]; while ((len fis.read(bytes)) ! -1) { fos.write(bytes,0,len); } } catch (Exception e) { e.printStackTrace(); } } }FileReader字符输入流用法适合读取文本而不乱码import java.io.FileReader; public class FileReaderDemo { static void main() { try (FileReader fr new FileReader(FileAndIO\\src\\file01)) { char[] chars new char[1024]; int len; while ((len fr.read(chars)) ! -1) { System.out.println(new String(chars, 0, len)); } } catch (Exception e) { e.printStackTrace(); } } }FileWriter字符输出流用法import java.io.FileWriter; public class FileWriterDemo { static void main() { try ( //关闭流包含刷新缓冲区 //FileWriter fw new FileWriter(FileAndIO\\src\\file03); FileWriter fw new FileWriter(FileAndIO\\src\\file03, true); ) { fw.write(hello world); fw.write(爱你); fw.write(\n); } catch (Exception e) { e.printStackTrace(); } } }