java基础第十六天 IO
2017-08-21 08:39
246 查看
1、File类
File类是对文件操作的类,是文件和目录路径名的抽象表示形式,能够创建文件(目录),删除文件(目录),重命名文件(目录)注意:
删除目录的时候,如果目录有文件,不能完成删除,必须先把文件删除了,才能删除该目录。
删除是直接删除,不进回收站
特点:
File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身
只有IO流才能访问文件的内容
File对象可以作为参数传递给IO流的构造函数
File类的常见构造方法:
public File(String pathname) 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。 绝对路径:window下据对路径带盘符,linux下带根目录/ 相对路径:相对当前位置的路径 public File(String parent,String child) 以parent为父路径,child为子路径创建File对象
文件操作相关
createNewFile() 创建新文件 delete() 删除文件
访问文件名:
getName() //能够得到文件名 getPath() //得到文件的路径+文件名 getAbsoluteFile() //得到绝对路径,返回File对象,可以继续操作文件 getAbsolutePath() //得到绝对路径,返回字符串 getParent() //得到文件的路径 renameTo(File newName) //文件重命名
文件检测
exists() //判断文件是否存在 canWrite() //判断文件是否可写 canRead() //判断文件是否可读 isFile() //判断是否一个文件 isDirectory() //判断是否一个目录
获取常规文件信息
lastModified() //最后一次修改时间 length() //文件的长度
目录操作相关
mkDir() //创建目录 mkDirs() //创建多级目录 list() //列出目录下的文件 listFiles() //列出目录下的文件对象
2、递归
方法递归:1、方法调用本身 2、递归调用要有出口,否则就是死循环 /** * 求出10的阶乘 * 10*9*8*7*6*5*4*3*2*1 * * 注意递归得有出口: * 出口条件是:a==1 * * @author Administrator * */ public class DiGui02 { public static void main(String[] args) { System.out.println(mul(10)); } public static int mul(int a){ if(a==1){ return 1; } else{ return a*mul(a-1); } } }
案例:递归删除某个目录下所有的txt文件,包含子目录
/** * 需求: * 删除桌面目录abc下所有目录的txt文件 * * * @author Administrator * */ public class FileTest02 { public static void main(String[] args) { File file=new File("C:\\Users\\Administrator\\Desktop\\abc\\"); FileTest02.delFileTxt(file); } public static void delFileTxt(File f){ File[] files=f.listFiles(); for (File file2 : files) { if(file2.isDirectory()){ delFileTxt(file2); }else{ if(file2.getPath().endsWith(".txt")){ file2.delete(); } } } } }
3、IO
IO:输入输出流四大基类:Reader,Writer,InputStream,OutputStream
分类:
流向不同: 输入流 InputStream Reader 输出流 OutputStream Writer 按类型不同 字节流 InputStream OutputStream 字符流 Reader Writer
JAVA中流操作基本上都是派生自以上四个基类,命名规则基本上如下:
XXXXReader XXXXWriter XXXXInputStream XXXXOutputStream
备注:
对于文本文件,应使用字符Reader、Writer流 对于二进制文件,应使用字节InputStream、OutputStream流
3.1 FileInputStream
字节输入流InputStream常用方法:int read() //读取一个字节 int read(byte[] b) //一次性读多个字节到缓冲区数组 int read(byte[] b, int off, int len)
代码示例:
/* * 读入数据步骤: * 1、使用文件输入流打开指定文件 * 对于文本文件,应使用字符输入流FileReader流 * 对于二进制文件,应使用字节输入流FileInputStream流 * 2、读取文件数据 * 3、关闭输入流 * */ InputStream inputStream = new FileInputStream("C:\\Users\\Administrator\\Desktop\\abc.txt"); //一次读一个字节 int read=0; while((read = inputStream.read()) !=-1){ System.out.print((char)(read)); } inputStream.close(); System.out.println(); inputStream = new FileInputStream("C:\\Users\\Administrator\\Desktop\\abc.txt"); //解决一次读一个字节中文乱码的方法 byte[] byte1 = new byte[inputStream.available()]; for (int i = 0; (read = inputStream.read()) !=-1;i++ ) { byte1[i]=(byte)read; } System.out.println(new String(byte1)); System.out.println(); inputStream = new FileInputStream("C:\\Users\\Administrator\\Desktop\\abc.txt"); //一次读一个缓冲区 byte[] b=new byte[4096]; while((read=inputStream.read(b)) != -1){ System.out.println(new String(b, 0, read)); }
3.2 FileOutputStream
字节输出流OutputStream常用方法:void write(int b);// 向流中写一个字节 void write(byte[] b);//向流中写一个数组 void write(byte[] b, int offset, int length); void flush(); //把数据从OS缓冲区刷入硬盘 void close(); 需要先刷新,再关闭此流
常用实现类:FileOutputStream
换行 windown \r\n linux \n 通常情况下只需要\n即可换行 内容追加 new FileOutputStream(String path, boolean append) append true表示向文件追加内容 不写或者false,覆盖源文件的内容
代码实例:
OutputStream out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\abc.txt"); //一次写一个字节 out.write(97); out.write(98); out.write(99); out.write(100); out.close(); out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\abc.txt"); //按缓冲区来写 //换行 // windown \r\n // linux \n // 通常情况下只需要\n即可换行 out.write("中国足球队真没就了\r\n".getBytes()); out.write("就是穆里尼奥来了都不行\r\n".getBytes()); out.close();
3.3 FileReader
字符输入流:Readerint read() // 读取一个字符 int read(char [] c) //一次性读多个字符到缓冲区数组 int read(char [] c, int off, int len)
常用实现类:FileReader
代码示例:
Reader reader = new FileReader("C:\\Users\\Administrator\\Desktop\\abc.txt"); //一次对一个字符 int r=0; while((r=reader.read()) != -1){ System.out.print((char)r); } System.out.println(); reader = new FileReader("C:\\Users\\Administrator\\Desktop\\abc.txt"); //按缓冲区来读 char[] c=new char[4096]; while((r=reader.read(c)) != -1){ System.out.print(new String(c,0,r)); }
3.4 FileWriter
字符输出流:Writervoid write(int c);// 向流中写一个字节/字符 void write(char[] cbuf);//向流中写一个数组 void write(char[] buff, int offset, int length); void flush(); //把数据从OS缓冲区刷入硬盘 void close(); 需要先刷新,再关闭此流
常用实现类:FileWriter
因为字符流直接以字符作为操作单位,所以 Writer 可以用字符串来替换字符数组,即以 String 对象作为参数 void write(String str); void write(String str, int off, int len);
换行
windown \r\n linux \n 通常情况下只需要\n即可换行
内容追加
new FileWriter(String path, boolean append) append true表示向文件追加内容 不写或者false,覆盖源文件的内容
代码示例:
FileWriter writer = new FileWriter("C:\\Users\\Administrator\\Desktop\\abc.txt"); //一次写一个字符 writer.write(97); writer.write(98); writer.write(99); writer.write(100); writer.flush(); writer.close(); //一次写一个缓冲区 writer = new FileWriter("C:\\Users\\Administrator\\Desktop\\abc.txt",true); char[] c= {'我','爱','你','中','国'}; writer.write(c); writer.flush(); writer.close(); //一次写一个字符串 writer = new FileWriter("C:\\Users\\Administrator\\Desktop\\abc.txt",true); writer.write("我们都是中国人....\r\n"); writer.write("我们都是中国人....\r\n"); writer.write("我们都是中国人....\r\n"); writer.flush(); writer.close();
相关文章推荐
- JAVA基础知识之IO——Java IO体系及常用类
- 黑马程序员---Java基础学习笔记(IO-后篇)
- Java基础20:IO
- 黑马程序员-----JAVA基础IO之流
- Java基础---(io和xml)
- Java基础-IO-其它流(笔记)
- 黑马程序员——Java基础——IO(一)
- 【Java基础系列】Java IO系统
- 黑马程序员—Java基础—IO1
- JAVA网络编程基础知识-Linux网络IO模型
- Java基础总结(二)----集合、多线程、io、虚拟机等
- Java IO 基础
- 01--Java IO基础
- 黑马程序员——java基础-IO(一)
- Java基础知识之IO(2)
- 黑马程序员_java基础之IO(输入,输出流)
- 黑马程序员 java基础之IO笔记
- java io基础知识
- Java基础:IO 流中的 flush
- 黑马程序员Java基础__IO(下)