黑马程序员——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);}}



0 0
原创粉丝点击