java基础-文件与IO
以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16772853.html
IO是一个庞大的体系,信息传递的通道靠IO,例如:文件读写、上传下载、网络通信等都要用到。
1.File类的基本概念
File类:表示文件和目录路径名的抽象表示形式
File类可以实现文件的创建、删除、重命名、得到路径、创建时间等等。是唯一与文件本身有关的操作类
File类的操作方法
Method | 说明 |
---|---|
public static final String separator | 表示路径分隔符“ \ ” |
public File(String pathname) | 构造File类实例,要传入路径 |
public boolean createNewFile() | 创建新文件 |
public boolean delete() | 删除文件 |
public boolean isDirectory() | 判断给定的路径是否是文件夹 |
public boolean isFIle() | 判断给定的路径是否是文件 |
public String[] list() | 列出文件夹中的文件 |
public File[] listFiles() | 列出文件夹中的所有文件 |
boolean mkdir() | 创建新的文件夹 |
public boolean renameTo(File dest) | 为文件重命名 |
public long length() | 返回文件大小 |
String getPath() | 路径名字符串 |
/**File类的使用*/public static void main(String[] args){//File类表示一个文件或目录//“c:\\test\\vince.txt"//"c:/test/vince.txt"File f1 = new File("C:/test/vince.txt"); if(!f1.exists()){ //判断f1指向的文件是否存在 try{ f1.createNewFile();//创建文件 System.out.println("文件创建成功") }catch(IOException e){ e.printStackTrace(); } } //f1.isFile()是否为文件 System.out.println("是否为文件夹:"+f1.isDirectory()); File f2 = new File("c:\\test\\my"); boolean b = f2.delete();//delete()只能删除空文件夹 System.out.println(b); String[] names = f2.list();//列出当前目录下的所有文件名 System.out.println(Arrays.toString(names); File[] fs = f2.listFiles();//列出当前目录下的所有文件,以file对象返回 for(File f : fs){ System.out.println("length="+f.length()); System.out.println("name="+f.name()); System.out.println("相对路径path="+f.path()); System.out.println("绝对路径getAbsolutePath="+f.getAbsolutePath()); System.out.println("是否为隐藏文件="+f.isHidden()); System.out.println("是否可读文件="+f.canRead()); System.out.println("文件最后修改的时间="+f.lastModified()); System.out.println("-------------“); } File f3 = new File("temp.txt"); System.out.println(f3.getPath()); System.out.println(f3.getAbsolutePath()); File f4 = new File("c:\\test\\dabin"); f4.mkdirs(); //重命名与移动文件 //f4.renameTo(new File("C:\\test\\dabin1")) f4.renameTo(new File("c:\\dabin1")); File f5 = new File("c:\\test\\my"); // File[] files = f5.listFiles(new FileFilter(){ // public boolean accept(File pathname){ // return pathname.getName().endsWith(".txt"); // } // }) ; File[] files = f5.listFiles((pathname)->pathname.getName().endsWith(".txt")); System.out.println("-------"); for(File f: files){ System.out.println(f.getName()); } }
示例
/**在指定的目录中查找文件*/public class FileDeom2{ public static void main(String[] args){ findFile(new File("c:\\Users\\vince\\Downloads"),".jpg"); } //查找文件的方法 private static void findFile(File target,String ext){ if(target==null)return; //如果文件是目录 if(target.isDirectory()){ File[] files = target.listFiles(); if(files!=null){ for(File f : files){ findFile(f,ext);//递归调用,一层层找,层数太深,会溢出 } } }else{ //此处表示File是一个文件 String name = target.getName().toLowerCase(); if(name.endsWith(ext)){ System.out.println(target.getAbsolutePath()); } } }}
2.字节流2.1 IO流概述
IO流:输入输出流(Input/Output)
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流
流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
2.2 IO流的分类
根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流
字节是数据传输的基本单位,文件内容以字节为单位存储
读文件叫输入流,从文件中把数据读到程序使用输入流
写文件叫输出流,从程序中把数据写到文件使用输出流
2.3 字节输出流
OutputStream类定义
public abstract class **OutputStream**extends Object implements Closeable,Flushable
此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到InputStream类某个接收器,要向文件中输出,使用FileOutputStream类
2.4 字节输入流
InputStream定义:
public abstract class **InputStream**extends Object implements Closeable
此抽象类是表示字节输入流的所有类的超类
FileInputStream从文件系统中的某个文件中获得输入字节
/**字节输出输入流输出流:超类OutputStream,对文件的输出流使用子类FileOutputStream输入流:超类InputStream,对文件的输入流使用子类FileInputStream*/public class ByteStreamDemo{ private static void in\(){ //1、确定目标文件 File file = new File("c:\\test\\vince.txt"); //2.构建一个文件输入流对象 try{ InputStream in = new FileInputStream(file); //3.声明StringBuilder StringBUilder buf = new StringBuilder(); //4.声明数组和长度 byte[] bytes = new byte[1024];//1024个字节 int len = -1 ;//表示每次读取的字节长度,-1表不存在 //5.把数据读入到数组中并返回读取的字节数,当不等-1时,表示读取到数据,等于-1表示文件已经读完 while(len = in.read(bytes)!= -1 ){ //6.根据读取到的字节数组,再转换为字符串内容,添加到StringBilder中 buf.append(new String(bytes)); } //7.打印内容 System.out.println(buf); //8.关闭输入流 in.close(); }catch (FileNotFoundException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } private static void out(){ //1、确定目标文件 File file = new File("c:\\test\\vince.txt"); //2.构建一个文件输出流对象 try{ OutputStream out = new FileOutputStream(file);//每一次执行会覆盖 //OutputStream out = new FileOutputStream(file,true);//append为true表示追加内容 //3.输出的内容是 String info = "疑是银河落九天\r\n";//在windows里'\r\n'表示换行 //String line = System.getProperty("line.separator");//获取换行符 //4.把内容写入到文件 out.write(info.getBytes())//不能传字符,要转换成字节 //5.关闭流 out.close(); System.out.println("write success..."); }catch (FileNotFoundException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } } public static void main(String[] args){ out(); in(); }}
有待补充…….
2022-10-09 17:07:42