IO流(一)__File对象和字符流FileWriter FileReader
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的更多相关文章
- [19/03/31-星期日] IO技术_四大抽象类_字符流( 字符输入流 Reader、 字符输出流 Writer )(含字符缓冲类)
一.概念 Reader Reader用于读取的字符流抽象类,数据单位为字符. int read(): 读取一个字符的数据,并将字符的值作为int类型返回(0-65535之间的一个值,即Unicode ...
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter
字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字 字符流 字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符 字符流: ...
- java io 学习笔记(三) 字符流读写
1.字符流读取 字符流读取的所有类都是从Reader这个超类继承的,都是用于读取字符的,这些类分别是InputSteamReader(从字符流读取).FileReader(继承与InputStream ...
- 01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】
day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件 能够使用字节输入流读取数据到程序 ...
- IO流中将字节流转成字符流的方法
//字节流--->字符流 1. public class TestIO { public static void main(String[] args) throws IOException { ...
- 08 IO流(五)——文件字符流FileWriter/FileReader
对比文件字节流的优势 对于文本文件的数据传输,使用文件字符流,就不用考虑编码转码的问题. 对比文件字节流,在方法上的不同有哪些 文件字符流有append方法: Writer append(char c ...
- java IO流文件拷贝文件(字符流标准写法)
public static void copyFile2(String path1, String path2) { Reader reader = null; Writer writer = nul ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十四)定义一个avro schema使用comsumer发送avro字符流,producer接受avro字符流并解析
参考<在Kafka中使用Avro编码消息:Consumer篇>.<在Kafka中使用Avro编码消息:Producter篇> 在了解如何avro发送到kafka,再从kafka ...
随机推荐
- 深入入门系列--Data Structure--04树
终于有机会重新回头学习一下一直困扰自身多年的数据结构了,赶脚棒棒哒.一直以来,对数据结构的掌握基本局限于线性表,稍微对树有一丢丢了解,而对于图那基本上就是不懂(不可否认,很多的考试中回避了图也是原因之 ...
- 处于同一个域中的两台Sql server 实例无法连接
处于同一个域中的两台Sql server 实例无法连接,报的错误信息如下: A network-related or instance-specific error occurred while es ...
- 关于MySQL密码你应该知道的那些事
本文将介绍MySQL用户密码相关的一些知识,以及5.6中对于安全性的一些改进 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,如果格式显示混乱,请通过以下链 ...
- 算法与数据结构(2)--英雄会第三届在线编程大赛:几个bing
基础知识的回顾不再写到这里面了,会写一些算法算法的解答或者读一些相关书籍的笔记. 今天做了一道算法题,来自微软必应·英雄会第三届在线编程大赛:几个bing? 做出来了...但不知道为啥执行测试用例失败 ...
- 数据结构:JAVA_二叉数查找树基本实现(中)
数据结构:二叉数查找树基本实现(JAVA语言版) 1.写在前面 二叉查找树得以广泛应用的一个重要原因是它能保持键的有序性,因此我们可以把它作为实现有序符号表API中的众多方法的基础. 也就是说我们构建 ...
- 赞!15个来自 CodePen 的酷炫 CSS 动画效果
CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...
- NASA的下一个十年(译)
原文 MICHAEL ROSTON (New York Times) 从左起:木卫二:土卫六:经过火星的水手谷星的合成图:金星的拼接图 大多数人已经从人类第一次近距离看到冥王星的兴奋中冷静下来.下一个 ...
- resin4的初次配置与使用
之前用的resin3,结果发布新项目老师文件冲突,我也找不到是哪里有问题,于是尝试使用resin4. 首先从官网下载最新resin4. 然后放到opt下,tar -zvxf 解压. 然后修改conf/ ...
- JavaScript基础—dom,事件
Js基础-DOM 1:dom:文档对象模型 Dom就是html页面的模型,将每个标签都作为一个对象,js通过调用dom中的属性,方法就可以对网页中的文本框,层等元素进行编程控制.Dom就是一些让jav ...
- 【UWP】FlipView绑定ItemsSource,Selectedindex的问题
最近在做列表头部的Carousel展示,Carousel使用的是FlipView展示,另外使用ListBox显示当前页,如下图 我们先设置一个绑定的数据源 public class GlobalRes ...