黑马程序员——Java基础--------IO流(二)
来源:互联网 发布:淘宝卖切糕 编辑:程序博客网 时间:2024/04/29 14:12
-------android培训、java培训、期待与您交流! ----------
IO流(二)
标准输入输出流
System类中的字段:in out,它们代表了系统标准的输入和输出设备
System.in标准输入流,默认设备,键盘
System.out标准输出流,默认设备,屏幕
获取用户键盘录入数据,并将数据打印在控制台上,如果用户输入的是over,结束
package IO;import java.io.IOException;import java.io.InputStream;public class ReadKey {public static void main(String[] args) throws IOException {//1,创建容器。StringBuilder sb = new StringBuilder();//2,获取键盘读取流。InputStream in = System.in;//3,定义变量记录读取到的字节,并循环获取。 int ch = 0;while((ch=in.read())!=-1){//在存储之前需要判断是否是换行标记 ,因为换行标记不存储。 if(ch=='\r')continue;if(ch=='\n'){String temp = sb.toString();if("over".equals(temp))break;System.out.println(temp.toUpperCase());//清空缓冲区sb.delete(0, sb.length());}else{//加入否则,不是换行存,是换行不存//将读取到的字节存储到StringBuilder中。sb.append((char)ch);}}System.out.println(sb.toString());}}
转换流:字节与字符之间的桥梁
InputStreamReader将字节转成字符的桥梁
OutputStreamWriter将字符流转成字节流的桥梁
当字节流中的数据都是字符时,转成字符流操作更高效
IO流的操作规律总结:
1,明确体系:
数据源:InputStream ,Reader
数据汇:OutputStream,Writer
2,明确数据:因为数据分两种:字节,字符。
数据源:是否是纯文本数据?
是:Reader
否:InputStream
数据汇:
是:Writer
否:OutputStream
到这里就可以明确具体要使用哪一个体系了。
剩下的就是要明确使用这个体系中的哪个对象。
3,明确设备:
数据源:
键盘:System.in
硬盘:FileXXX
内存:数组。
网络:socket socket.getInputStream();
数据汇:
控制台:System.out
硬盘:FileXXX
内存:数组
网络:socket socket.getOutputStream();
4,明确额外功能:
1,需要转换?是,使用转换流。InputStreamReader OutputStreamWriter
2,需要高效?是,使用缓冲区。Buffered
将键盘录入的数据写入到一个文件中。
package IO;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;public class TransStreamDemo {public static void main(String[] args) throws IOException {// TODO Auto-generated method stub//键盘录入写到文件中,操作的数据是文本数据,源是System.in,所以用到转换流,为了高效,用缓存BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//创建字符输出流,与目的想关联BufferedWriter bw = new BufferedWriter(new FileWriter("F://Demo.txt"));String s = null;while((s=br.readLine())!=null){bw.write(s);bw.newLine();bw.flush();}//关闭流br.close();bw.close();}}当用到指定编码表的时候,必须使用转换流,在构造对象是,要指定编码表
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(F://Trans.txt),"GBK");
高效:
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(F://Trans.txt),"utf-8"));
InputStreamReader isr = new InputStreamReader(new FileInputStream("F://Trans.txt"),"GBK");
结合:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("F://Trans.txt"),"GBK"));
什么时候用转换流:
1.源或者目的对应的设备是字节流,但操作的是文本数据,可以使用转换流作为桥梁,提高对文本操作的便捷
2.一旦操作的文本涉及到具体的指定编码表时,要使用转换流
File类:
用来将文件或者文件夹封装成对象
方便对文件与文件夹的属性信息进行操作
File对象可以作为参数传递给流的构造函数
File的构造函数可以将一个已存在,或者不存在的文件或者目录封装成File对象
File对象的常见方法。
1,获取。
1.1 获取文件名称。String getName()
1.2 获取文件路径。String getAbsolutePath()绝对路径,getPath()相对路径。
1.3 获取文件大小。lenth();返回类型long
1.4 获取文件修改时间。lastModified()最后一次修改的时间;返回类型long
2,创建与删除。
创建文件createNewFile()要拋IO异常,返回类型是boolean,真创建,假不创建
createTempFile(String prefix, String suffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀名
createTempFile(String prefix, String suffix, File directory(路径)) 在指定目录中创建一个文件,使用给定的前缀和后缀名
Delete()删除文件,返回类型boolean,也得有IO异常
deleteOnExit() 文件创建了,在虚拟机退出时将其删掉
创建文件夹
创建文件夹mkdir,返回类型boolean,创建单级目录
创建多级目录mkdirs
删除文件夹delete,如果里面有文件不会删,但里面要是空文件夹就把最里面删掉
如果文件正被流所操作,也删不掉
3,判断。
exists():是否存在
isFile():是不是文件呢
isDirectory():是否是路径
4, 重命名
renameTo(File)返回boolean,如果不是一个盘或者文件夹就是剪切
package IO;import java.io.File;import java.io.IOException;public class FileDemo {public static void main(String[] args) throws IOException {//创建一个File对象File f = new File("F://Demo.txt");//创建文件f.createNewFile();//获取绝对路径System.out.println(f.getAbsolutePath());//F:\Demo.txt//获取父类路径System.out.println(f.getParent());//F:\//获取文件名System.out.println(f.getName());//Demo.txt//获取文件大小System.out.println(f.length());//0//获取修改时间System.out.println(f.lastModified());//1441540562602//判断是否存在System.out.println(f.exists());//true//判断是否是文件System.out.println(f.isFile());//true//判断是否是目录System.out.println(f.isDirectory());//false}}
5,listRoots():返回可用文件系统根目录的数组
list():返回当前目录下的文件名称文件夹名称(包括隐藏文件)的字符串数组
listFiles():返回当前目录的文件数组
package IO;import java.io.File;public class FileList {public static void main(String[] args) {//获取根目录for(File file:File.listRoots()){System.out.println(file.toString());}//获取目录下文件名File f = new File("F://");for(String s :f.list()){System.out.println(s);}//获取目录下文件for(File ff:f.listFiles()){System.out.println(ff.toString());}}}过滤器接口
FileFilter和FilenameFilter
实现他们的类可用于过滤器指定的文件,
将FileFilter或FilenameFilter的实例传递给listFiles(),list()即可
获取指定目录下的Java文件
package IO;import java.io.File;import java.io.FilenameFilter;public class FilterByJava implements FilenameFilter {String name;public FilterByJava(String name) {super();this.name = name;}@Overridepublic boolean accept(File dir, String name) {// TODO Auto-generated method stubreturn name.endsWith(this.name);}}package IO;import java.io.File;public class FilterDemo {public static void main(String[] args) {File f = new File("F://");File[] ff=f.listFiles(new FilterByJava("java"));for(File file : ff){System.out.println(file.toString());}String [] s = f.list(new FilterByJava("java"));for(String ss:s){System.out.println(ss);}}}递归:函数自身直接或间接调用到自身,就是递归
什么时候用:
一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关。 这时可以用递归来解决问题。
注意:
1,递归一定明确条件。否则容易栈溢出。
2,注意一下递归的次数
深度遍历:遍历目录中所有的内容
删除一个目录中的所有文件
package IO;import java.io.File;public class RemoveDirTest {public static void main(String[] args) {File dir = new File("G:\\A");//如果不是目录,输出,不是目录文件if(!dir.isDirectory()){System.out.println("清输入正确目录");}removeDir(dir);}public static void removeDir(File dir) {//获取目录中所有文件File[] files = dir.listFiles();for(File file : files){//如果是文件夹,递归操作if(file.isDirectory()){removeDir(file);}else{System.out.println(file+":"+file.delete());}}System.out.println(files);System.out.println(dir+":"+dir.delete()+"haha");//干掉文件夹}}
- 黑马程序员——Java基础--IO流(二)
- 黑马程序员——Java基础--------IO流(二)
- 黑马程序员——JAVA基础----IO流(二)
- 黑马程序员——Java基础---IO流(二)
- 黑马程序员——Java基础--IO(二)
- 黑马程序员-----java基础IO流<二>
- 黑马程序员--------------JAVA基础-------------IO流二
- 黑马程序员-----Java基础-----IO流(二)
- 黑马程序员——java基础——IO流(二)
- 黑马程序员——Java基础——IO流(二)
- 黑马程序员——JAVA基础------IO流(二)----字节流
- 黑马程序员——java基础—IO流(二)
- 黑马程序员——java基础--IO流(篇二)
- 黑马程序员——Java基础IO流总结(二)
- 黑马程序员—java基础学习--IO ( Input Output )流(二)
- 黑马程序员——Java基础——IO(二)
- 黑马程序员——java基础-IO(二)
- 黑马程序员——Java基础---IO(二)
- 第7周—项目1 建立顺序环形队列算法库
- 【笔试面试】75道逻辑推理题及答案
- FullCalendar应用——新建日程事件
- 解读ASP.NET 5 & MVC6系列(12):基于Lamda表达式的强类型Routing实现
- Python Flask script 使用
- 黑马程序员——Java基础--------IO流(二)
- Impala004-Impala管理
- RabbitMQ搭建和管理
- 解读ASP.NET 5 & MVC6系列(13):TagHelper
- 事物不回滚
- qualcomm platform camera
- 第七周项目一~~顺序环形队列算法库
- Xcode 6 正式版如何创建一个Empty Application
- Android与JavaScrpit相互调用