黑马程序员——IO流--转换流和键盘输入、File类
来源:互联网 发布:mac chm阅读器 最好的 编辑:程序博客网 时间:2024/06/08 09:16
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一:键盘录入:
键盘录入只能读取一个字节
1、读取键盘输入,并打印在控制台上
InputStream in = System.in;int ch = in.read();
System.out.println(ch);
//in.close(); 关闭后无法使用
2、键盘读取练习:
获取键盘录入数据,将数据变成大写显示在控制台,输入over结束
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="white-space:pre"></span>//创建容器StringBuilder sb = new StringBuilder();//键盘读取流InputStream in = System.in;int ch = 0;while((ch=in.read())!=-1){//判断换行if(ch=='\r')continue;if(ch=='\n'){String tempString=sb.toString();if("over".equals(tempString)){break;}System.out.print(tempString.toUpperCase());sb.delete(0, sb.length());//清空缓冲区}else{//存储字节sb.append((char)ch);}}System.out.println((char)ch);</span></span></span>二:字节流和字节流转换:
1、
//将字节转成字符的桥梁,转换流。 InputStreamReader
//将字符转成字节的桥梁,转换流。 OutputStreamWriter<<span style="font-size:18px;">span style="font-size:18px;">读取键盘输入,并打印在控制台上InputStream in =System.in;InputStreamReader isr = new InputStreamReader(in);//字节变字符BufferedReader buffr=new BufferedReader(isr); //字符缓冲区(高效)OutputStream out = System.out; //在控制台输出字节OutputStreamWriter osw = new OutputStreamWriter(out);//字符变字节BufferedWriter buffw=new BufferedWriter(osw);String line=null;while((line=buffr.readLine())!=null){buffw.write(line.toUpperCase());//将字符数据写入缓冲区buffw.flush();}简化为:BufferedReader buffr=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter buffw=new BufferedWriter(new OutputStreamWriter(System.out));String line=null;while((line=buffr.readLine())!=null){buffw.write(line.toUpperCase());//将字符数据写入缓冲区buffw.flush();}</span></span>2、流的基本操作规律
转换流:
InputStreamReader :字节到字符的桥梁。
OutputStreamWriter:字符到字节的桥梁。
1,明确源和目的(汇) 用来读
源:InputStream Reader
目的:OutputStream Writer
2,明确数据是否是纯文本数据。
源:是纯文本:Reader
否:InputStream
目的:是纯文本 Writer
否:OutputStream
3,明确具体的设备。
源设备:
硬盘:File
键盘:System.in
内存:数组
网络:Socket流
目的设备:
硬盘:File
控制台:System.out
内存:数组
网络:Socket流
三、操作练习<span style="font-size:18px;"><span style="font-size:18px;">需求1:复制一个文本文件。FileReader fr = new FileReader("a.txt"); //源为字符文本FileWriter fw = new FileWriter("b.txt"); //目的为字符文本需要高效。BufferedReader bufr = new BufferedReader(new FileReader("a.txt")); //缓冲BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));============================================需求2:读取键盘录入信息,并写入到一个文件中。 InputStreamReader isr = new InputStreamReader(System.in);//字节变字符 FileWriter fw = new FileWriter("b.txt"); //字符高效之后:BufferedReader buffr = new BufferedReader(new InputStreamReader(System.in)); //直接缓冲BufferedWriter buffw = new BufferedWriter(new FileWriter("b.txt"));==================================================需求3:将一个文本文件数据显示在控制台上。FileReader fr = new FileReader(“a.txt”); //字符文本OutputStreamWriter osr = new OutputStreamWriter(System.out); //字符变字节高效之后:BufferedReader buffr = new BufferedReader(FileReader(“a.txt”)); //缓冲BufferedWriter buffw = new BufferedWriter(new OutputStreamWriter(System.out));==========================================================需求4:读取键盘录入数据,显示在控制台上。需要转换,因为都是字节流,但是操作的却是文本数据。所以使用字符流操作起来更为便捷。InputStreamReader isr = new InputStreamReader(System.in); //字节变为字符OutputStreamWriter osw = new OutputStreamWriter(System.out); //字符变为字节为了将其高效。BufferedReader buffr = new BufferedReader(new InputStreamReader(System.in)); //缓冲BufferedWriter buffw = new BufferedWriter(new OutputStreamWriter(System.out));============================================================5,将一个中文字符串数据按照指定的编码表写入到一个文本文件中.既然需求中已经明确了指定编码表的动作。 字节流+默认编码表那就不可以使用FileWriter,因为FileWriter内部是使用默认的本地码表。</span></span>
<span style="font-size:18px;"><span style="font-size:18px;">只能使用其父类。 OutputStreamWriter.<span style="color:#ff0000;">OutputStreamWriter接收一个字节输出流对象,既然是操作文件,那么该对象应该是FileOutputStream</span>OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("utf_8.txt"),<span style="color:#ff0000;">"UTF-8"</span>);//如果高效BufferedWriter buffw = new BufferedWriter(osw);osw.write("你好");osw.close();按照指定的编码表读取一个文本InputStreamReader isr =new InputStreamReader(new FileInputStream("utf_8.txt"),"UTF-8");char[] buff = new char[20];int len =0;while((len=isr.read(buff))!=-1){System.out.println(new String(buff,0,len));}isr.close();</span></span>什么时候使用转换流:1源或目的对应的是字节流,但操作的是文本数据,可使用转换流,提高对文本操作的简洁
2.操作文本有制定编码表,必须用转换流
四、File类
1、将可以存在的,或不存在的文件或目录封装成file对象
File file = new File(“c:\\a.txt”);
File fi = new File(“c:”,“a.txt”);
分隔符:System.getProperty(“file.separator”)或 File.separator
File fi = new File(“c:”+File.separator +”abc”+File.separator+”a.txt”);
2.常见方法及应用://获取名称 String name = file.getName();
//获取绝对路径 String absPath = file.getAbsolutePath();
//相对路径 String path = file.getPath();
//文件大小 long len = file.length();
//修改时间 long time = file.lastModified();
//格式化: Date date = new Date(time);
(1)创建: boolean b = file.createNewFile();
如果文件不存在,则创建,如果文件存在,则不创建
(2)删除文件夹 boolean b = file.delete(); //文件夹内有文件,无法删除
(3)创建单级文件夹 boolean b = file.mkdir(); //多级 mkdirs()
(4)文件是否存在 boolean b =file.exists();
(5)是否为文件 file.isFile() 是否为目录 file.isDirectory() 是否隐藏 file.isHidden()
(6)重命名到…: file1.renameTo(file2);
(7)输出所有盘符:File[] files = File.listRoots();
for(File file:files){
System.out.println(file);
}
(8)空闲空间 file.getFreeSpace();
虚拟机可用空间:file.getUsableSpace()
全部空间 file.getTotalSpace()
File封装的必须是目录,否则为空,如访问系统级目录也为空(空指针异常)
File dir = new File(“d:\\”);
String[] names = dir.list(); //获取当前目录的文件或文件夹名称
for(String name:names){sysout(name);}
(9)文件名过滤File dir = new File(“d:\\”);String[] names = dir.list(new FilterByName());For(String name:names){ sysout(name);}//文件名过滤public class FilterByName <span style="color:#ff0000;">implements FilenameFilter</span>{public boolean <span style="color:#ff0000;">accept</span>(File dir, String name) {return <span style="color:#ff0000;">name.endsWith</span>(".java");}(10)文件过滤
File dir = new File("d:\\");File[] files = dir.listFiles(new FilterByHidden());for (File file : files) {System.out.println(file);}public class FilterByHidden implements FileFilter {@Overridepublic boolean accept(File pathname) {return !pathname.isHidden();(11)后缀名过滤
public class FilterByName implements FilenameFilter{private String suffix;public FilterByName(String suffix) {super();this.suffix = suffix; //过滤的名}public boolean accept(File dir, String name) {return name.endsWith(suffix);}}
- 黑马程序员——IO流--转换流和键盘输入、File类
- 黑马程序员——IO流(四)File类
- 黑马程序员——IO流-File类
- 黑马程序员——IO流5:File类
- 黑马程序员——IO流与File类
- 黑马程序员——Java基础知识——IO(字符流、字节流、转换流、File)
- 黑马程序员——IO流及字符编码和File类对象
- 黑马程序员--File类和IO其他流
- 黑马程序员—IO(File类和Directory类_OpenFileDialog_SaveFileDialog_FolderBrowserDialog)
- 51.黑马程序员-IO流-File类
- 黑马程序员---IO流(File类)
- 黑马程序员--IO流之File类
- 黑马程序员---------IO流File类
- 黑马程序员---IO流-File类,递归
- 黑马程序员---IO流及File类
- 黑马程序员----IO流(File类)
- 黑马程序员--IO流中的File类
- 黑马程序员 — IO(File类)
- iOS- 详解文本属性Attributes
- [Leetcode 131, Medium] Palindrome Partitioning
- Android快速开发框架-AIO
- NOJ 1429 全排列的输出
- stucts中package和action的配置
- 黑马程序员——IO流--转换流和键盘输入、File类
- Javascript 阻止冒泡
- 考题一:研究对全排列着色的性质 问题 A: 首先需要生成 n 的全排列然后对 n 的全排列进行着色, 使得相邻的两个数只需用最少颜色就可以把相邻的两个数用那区分开. (这里相邻包含两层含义:同时在自然
- C 算法精介----链表->单链表
- Hibernate和IBatis对比
- hdu 2830 逐行扫描dp求最大完全矩形
- struts.i18n.encoding的作用
- 支持每个item展开的listview
- Spring MVC和Struts2的比较