IO流:
IO流用来处理设备之间的数据传输,Java对于流的操作对象都在IO包中
将外设中的数据读取到内存中:输入
将内存的数写入到外设中:输出

流分为字节流和字符流
字符流的由来:
其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表。
获取相应的文字。在对这个文字进行操作,简单地说就是:字节流+编码表

字节流的顶层父类:
1.InputStream 2.OutputStream

字符流的两个顶层父类:
1.Reader 2.Writer
这些体系的子类都以父类名作为后缀
而子类名的前缀就是该对象的功能

一、File对象

下面几种方式都可以创建File对象:

private static void construtorDemo() {
//将一个已经存在的,或者不存在的文件或者目录封装成file对象
File f1=new File("c:\\a.txt"); File f2=new File("c:\\","a.txt"); File f=new File("c:\\a.txt");
File f3=new File(f,"a.txt"); File f4=new File("c:"+File.separator+"a.txt");
}

* File对象的常见方法
* 1.获取
*     1.1获取文件名称
*     1.2获取文件路径
*     1.3获取文件大小
*     1.4获取文件修改时间
* 2.创建与删除
* boolean
* 3.判断
* 4.重命名

 package p8.io.file;

 import java.io.File;
import java.io.IOException;
import java.util.Date; import p8.io.filter.FilterByHidden;
import p8.io.filter.FilterByJava;
import p8.io.filter.SuffixFilter; public class FileMethodDemo { public static void main(String[] args) throws IOException {
//getDemo();
//createAndDeleteDemo();
//isDemo();
//renameToDemo();
//listRootDemo();
//listDemo();
listDemo_2();
listDemo_3();
listDemo_4(); } /*
* file.list()方法不能遍历文件夹中的文件
*/
private static void listDemo_4() {
File dir =new File("c:\\");
File[] files=dir.listFiles(new FilterByHidden()); //显示隐藏文件
for (File file : files) {
System.out.println(file);
}
} private static void listDemo_3() {
File file =new File("c:\\");
//用Lambda表达式
//File[] files=dir.listFiles((File f,String name)->name.endsWith(".java")); String[] names=file.list(new SuffixFilter(".java")); //添加后缀名过滤器
for (String name : names) {
System.out.println(name);
}
} private static void listDemo_2() {
File file =new File("e:\\");
String[] names=file.list(new FilterByJava()); //添加名称过滤器
for (String name : names) {
System.out.println(name); } } //获取当目录下的文件以及文件夹的名称。包含隐藏文件。
private static void listDemo() {
File file =new File("f:\\");
/*
* 调用list方法中File对象中封装的必须是目录。
* 如果访问的系统级对象也会发生空指针异常
* 如果目录存在但是没有内容,会返回一个数组但是长度为0.
*/
String[] names=file.list();
for (String name : names) {
System.out.println(name); } } //获取磁盘大小和根路径
private static void listRootDemo() {
File file =new File("d:\\");
System.out.println("getFreeSpace:"+file.getFreeSpace());
System.out.println("getTotalSpace:"+file.getTotalSpace());
System.out.println("getUsableSpace:"+file.getUsableSpace()); File[] files =File.listRoots();
for ( File f : files) {
System.out.println(f);
}
} //更改文件名
private static void renameToDemo() {
File f1=new File("d://aaa.txt"); //已有文件
File f2=new File("d://1aaa.txt"); //更改后的文件名
boolean b=f1.renameTo(f2);//重命名并且会剪切
System.out.println(b); } //文件(夹)是否存在
private static void isDemo() throws IOException {
File f=new File("ab7.txt");
f.mkdir();
f.createNewFile();
// boolean b=f.exists();
//最好先判断是否存在
System.out.println(f.isFile());
System.out.println(f.isDirectory()); } //创建和删除文件(夹)
private static void createAndDeleteDemo() throws IOException {
File dir=new File("abc//hk//hiih//iuhj//ukh.txt");
//boolean b=dir.mkdir();//创建文件夹,只能创建单级目录 //boolean c=dir.delete();//删除文件夹,windows的删除是从里往外删的,如果文件夹中有内容则无法删除 dir.mkdirs();//创建多级目录
//dir.delete();//只删除最里的文件夹 //文件的创建和删除
File file= new File("file.txt");
/*
* 和输出流不一样,如果文件不存在,则创建。如果存在则不创建。
*/
boolean b=file.createNewFile();
System.out.println("b="+b);
//boolean c=file.delete();
//System.out.println(c); } //获取文件的信息
private static void getDemo() {
//File file=new File("a.txt"); //相对路径
File file=new File("E:\\JAVA\\JAVA练习\\9.IO流\\a.txt"); //绝对路径
String name=file.getName();
String path=file.getAbsolutePath();//绝对路径
String path1=file.getPath(); //相对路径
long len=file.length();
long time =file.lastModified();
Date date=new Date(time); System.out.println("name:"+name);
System.out.println("path:"+path);
System.out.println("path1:"+path1);//得到是file中传入的值
System.out.println("len:"+len);
System.out.println("time:"+date);
} }

p8.io.filter过滤文件(将其替换为Lambda表达式更为简洁,FilenameFilter接口是函数式接口,boolean accept(File dir, String name)方法  FileFilter接口也是函数式接口,boolean accept(File pathname)):

public class FilterByHidden implements FileFilter {

    @Override
public boolean accept(File pathname) { return pathname.isHidden();
} } public class FilterByJava implements FilenameFilter { @Override
public boolean accept(File dir, String name) { return name.endsWith(".java");
}
} public class SuffixFilter implements FilenameFilter {
private String suffix; public SuffixFilter(String suffix) {
super();
this.suffix = suffix;
} @Override
public boolean accept(File dir, String name) { return name.endsWith(suffix);
} }

二、FileWriter

FileWriter fw=new FileWriter("demo.txt",true);   //如果构造函数加入true,可以实现对文件的续写

private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void main(String[] args) throws IOException {
//创建一个可以往文件中写入字符数据的输出流对象
/*
* 既然是往一个文件中写入文件数据,那么在创建对象时,就必须明确该文件(用于存储数据的目的地)
* 如果文件不存在,则会自动创建
* 如果文件存在,则会被覆盖
* 如果构造函数加入true,可以实现对文件的续写
*/
FileWriter fw=new FileWriter("demo.txt",true); /*
* 调用Writer对象中的writer(string)
* 其实数据存储到了临时缓冲区中。
*/
fw.write("aga"+LINE_SEPARATOR+"ngag"); /*
* 进行刷新,将数据直接写到目的地
*/
//fw.flush();
/*
* 关闭流,关闭资源,在关闭前,会调用flush
*/
fw.close(); }

三、FileReader

FileReader fr=new FileReader("demo.txt");

ch=fr.read();  //一次读取一个字符,返回asc码数字

len=fr.read(buf) //一次读取一个数组长度的字符,返回读取长度

public class FileReaderDemo {

    public static void main(String[] args) throws IOException {
/*
* 1.创建读取字符数据的流对象
* 在创建读取流对象时,必须要明确被读取的文件。一定要确定该文件是存在的。
* 用一个读取流关联一个已存在文件
*/
FileReader fr=new FileReader("demo.txt");
int ch=fr.read();
System.out.println(ch);
int ch1=0;
while((ch1=fr.read())!=-1){
System.out.println(((char)ch1));
} /*
* 使用read(char[])读取文本文件数据。
* 先创建字符数组。效率更高。
*/
char[] buf= new char[1024];
int len=0;
while((len=fr.read(buf))!=-1){
System.out.println(new String(buf,0,len));
} fr.close();
} }

作业:将c盘的一个文本文件复制到d盘

分析:
读取c盘中的文件数据
将这些数据写入到d盘中
连读带写。
思路:
1.需要读取源
2.将读到的源数据写到目的地
3.既然是操作文本数据,使用字符流

public class CopyTextTest {

    public static void main(String[] args) throws IOException  {
//1.读取一个已有的文本文件,使用字符去流和文件相关联
FileReader fr=new FileReader("demo.txt");
//2.创建一个目的,用于存储读到数据
FileWriter fw=new FileWriter("D://copytext_1.txt");
//3.频繁的读写操作
int ch=0;
while((ch=fr.read())!=-1){
fw.write(ch);
}
//4.关闭资源
fw.close();
fr.close(); } }

IO流(一)__File对象和字符流FileWriter FileReader的更多相关文章

  1. [19/03/31-星期日] IO技术_四大抽象类_字符流( 字符输入流 Reader、 字符输出流 Writer )(含字符缓冲类)

     一.概念 Reader Reader用于读取的字符流抽象类,数据单位为字符. int read(): 读取一个字符的数据,并将字符的值作为int类型返回(0-65535之间的一个值,即Unicode ...

  2. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...

  3. (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter

    字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字 字符流 字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符 字符流: ...

  4. java io 学习笔记(三) 字符流读写

    1.字符流读取 字符流读取的所有类都是从Reader这个超类继承的,都是用于读取字符的,这些类分别是InputSteamReader(从字符流读取).FileReader(继承与InputStream ...

  5. 01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】

    day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件 能够使用字节输入流读取数据到程序 ...

  6. IO流中将字节流转成字符流的方法

    //字节流--->字符流 1. public class TestIO { public static void main(String[] args) throws IOException { ...

  7. 08 IO流(五)——文件字符流FileWriter/FileReader

    对比文件字节流的优势 对于文本文件的数据传输,使用文件字符流,就不用考虑编码转码的问题. 对比文件字节流,在方法上的不同有哪些 文件字符流有append方法: Writer append(char c ...

  8. java IO流文件拷贝文件(字符流标准写法)

    public static void copyFile2(String path1, String path2) { Reader reader = null; Writer writer = nul ...

  9. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十四)定义一个avro schema使用comsumer发送avro字符流,producer接受avro字符流并解析

    参考<在Kafka中使用Avro编码消息:Consumer篇>.<在Kafka中使用Avro编码消息:Producter篇> 在了解如何avro发送到kafka,再从kafka ...

随机推荐

  1. Django的Model上都有些什么

    Django的Model上都有些什么 modelinfo= ['DoesNotExist', 'MultipleObjectsReturned', '__class__', '__delattr__' ...

  2. 解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析

    许可证编译器 (Lc.exe) 的作用是读取包含授权信息的文本文件,并产生一个可作为资源嵌入到公用语言运行库可执行文件中的 .licenses 文件. 在使用第三方类库时,经常会看到它自带的演示程序中 ...

  3. 让BI告诉你:圣诞老人去哪了?

    刚看到一篇关于圣诞节BI分析的文章,觉得很有意思,特来翻译了下和大家一起分享(可惜的是文章发布的时间有点久). 伴随着圣诞节即将到来的日子,POWER BI团队来回答大家最为关注的一个问题:圣诞老人到 ...

  4. SQL Server中的版本号

        在SQL Server中,通常版本号的命名是大版本.小版本.累积更新这种形式,比如说9.X.XXX就是SQL Server 2005.下面我将把SQL Server中版本号对应的版本列出来,以 ...

  5. 了解HTML表单之13个表单控件

    目录 传统控件 button select option optgroup textarea fieldset legend label 新增控件 datalist keygen output pro ...

  6. poj3422 Kaka's Matrix Travels(最小费用最大流问题)

    /* poj3422 Kaka's Matrix Travels 不知道 k次 dp做为什么不对??? 看了大牛的代码,才知道还可以这样做! 开始没有理解将a 和 a‘ 之间建立怎样的两条边,导致程序 ...

  7. gulp的使用

    一.简介 gulp是一款前端构建工具,是和grunt很类似的一款构建工具,但是相比grunt来说,gulp更轻量级,配置和使用更简单,命令更少,更容易学习和记住. 二.具体的使用 安装gulp: np ...

  8. MemCache在win7上的可视化配置以及Nodejs/Net应用

    惯例科普:MemCache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访问数据库的 ...

  9. Java多线程系列--“基础篇”06之 线程让步

    概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:ht ...

  10. ViewPager的缓存机制

    1.实现Viewpager的页面懒加载: 在某些情况下,例如使用ViewPager查看多张大图,此时多张图片不能一次性载入,只有在浏览该页面时才载入(或者预先载入下一页面)页面的具体内容. 2.可控V ...