文件读写

如果在代码中写入大量的数据,会增加代码的冗余度,通过读取文件的方式,可以精简代码,便于数据的修改和代码的维护

IO流的分类:字节流和字符流

字符流

  • 字符输出流:写文本文件的,抽象基类java.io.Writer。写的方法write,很多重载形式,写字符数组、单个字符、字符串、字符串组一部分、字符串的一部分,flush数据流的缓冲,close关闭对象。
  • 字符输入流:读取文本文件的,抽象基类java.io.Reader。读的方法read,很多重载形式,读取单个字符、字符数组、字符数组的一部分。close关闭流对象。

字节流

  • 字节输出流:写任意的文件,抽象基类java.io.OutputStream。写的方法write,很多重载形式,写单个字节,字符数组,字节数组的一部分,close关闭流对象。
  • 字节输入流:读取任意文件,抽象基类java.io.InputStream。读的方法read,很多重载形式,读取单个字节,字符数组,字节数组的一部分,close关闭流对象。

    IO六种的所有类的命名法则:后缀都是父类名,前面的都是可以操作的文件名,流向名。

    FileinputStream FileReader ObjectInputStream ObjectOutputStream
#java
package study1; import org.testng.annotations.Test; import java.io.*; public class IODemo {
@org.junit.Test
public void test() throws IOException {
//如果文件不存在,会自动创建
FileWriter fw = new FileWriter(new File("/Users/chenshanju/Desktop/data/a.txt"));
fw.write("hello world\n");
fw.write("123\n");
/**
* 写入文件后,未执行其他操作,写入的内容不会保存
* 写入文件后,close流,会自动保存文件。
* 写入数据较多是,使用write写入后,使用flush保存写入的内容,降低对系统压力
*/
fw.flush();
fw.write(123);//此处写入的是ascii码值
fw.flush();
fw.close();//释放流资源
}
@org.junit.Test
public void test2() {
FileWriter fw= null ;
try{
fw = new FileWriter(new File("/Users/chenshanju/Desktop/data/a.txt"));
}catch (IOException e){
e.printStackTrace();
}finally{
try{
fw.close();//此处释放流资源,必须要先初始化
}catch (IOException e){
e.printStackTrace();
}
}
}
@org.junit.Test
public void append() throws IOException{
//追加内容,而非覆盖
FileWriter fw = new FileWriter(new File("/Users/chenshanju/Desktop/data/a.txt"),true);
fw.write("hello python\n");
fw.flush();
fw.close();
}
@org.junit.Test
public void test_read() throws IOException{
//读取文件
FileWriter fw = null;
fw = new FileWriter(new File("/Users/chenshanju/Desktop/data/a.txt"));
fw.write("abcd");
fw.flush();
fw.close();
FileReader fr = null;
fr = new FileReader(new File("/Users/chenshanju/Desktop/data/a.txt"));
System.out.println(fr.read());//输出字符的ASCII码值,每执行一次就读取1次
System.out.println((char)fr.read());
System.out.println(fr.read());
System.out.println(fr.read());
System.out.println(fr.read());
System.out.println(fr.read());//没有内容,输出-1
fr.close();
}
@org.junit.Test
public void test_read2() throws IOException{
//读取单个字符
FileWriter fw = null;
fw = new FileWriter(new File("/Users/chenshanju/Desktop/data/a.txt"));
fw.write("abcd");
fw.flush();
fw.close();
FileReader fr = null;
fr = new FileReader(new File("/Users/chenshanju/Desktop/data/a.txt"));
int i=0;
while((i= fr.read())!=-1){
/**
* 获取字符的ascii码值,并根据ascii码值强转为字符
*/
System.out.println((char)i);
}
fr.close();
}
@org.junit.Test
public void test_read3() throws IOException{
//读取字符数组,一次读取2个字符
FileWriter fw = new FileWriter(new File("Data/b.txt"));
fw.write("java");
char [] cha = {'a','b','c'};
fw.write(cha);
fw.close();
FileReader fr = new FileReader(new File("Data/b.txt"));
int i = 0;
char [] ch = new char[2];//一次读取2个字符
while((i=fr.read(ch))!=-1){
System.out.print(i+"\t");
System.out.println(ch);
/**
* System.out.println(i+"\t"+new String(ch));
* 和int类型同时使用,不加new String,会返回哈希码[C@6a6824be
* 加上new String和上面2行输出结果一致
* 2 ja
* 2 va
* 2 ab
* 1 cb 最后1次只装入了1个字符,只将a替换为c,b并未替换
*/
}
}
@org.junit.Test
//单个字符的写入
public void test_cp() throws IOException{
FileReader fr = null;
FileWriter fw = null;
fr = new FileReader(new File("Data/b.txt"));
fw = new FileWriter(new File("Data/b1.txt"));
int i = 0;
while((i=fr.read())!=-1){
fw.write((char)i);
}
fw.close();
fr.close();
}
@org.junit.Test
//字符数组的写入
public void test_cp1() throws IOException{
FileReader fr = null;
FileWriter fw = null;
fr = new FileReader(new File("Data/b.txt"));
fw = new FileWriter(new File("Data/b2.txt"));
char [] ch = new char[2];
int i = 0;
while((i=fr.read(ch))!=-1){
fw.write(ch,0,i);
}
fw.close();
fr.close();
}
@org.junit.Test
public void test_out() throws IOException{
//字节输出流
FileOutputStream out = null;
out = new FileOutputStream(new File("Data/c.txt"));
out.write("abcdefgh".getBytes());
out.close();
}
@org.junit.Test
public void test_in() throws IOException{
//字节输入流
FileInputStream in = null;
in = new FileInputStream(new File("Data/c.txt"));
int i = 0;
while((i=in.read())!=-1){
System.out.println((char)i);
}
in.close();
}
@org.junit.Test
public void test_in_char() throws IOException{
FileInputStream in = new FileInputStream(new File("Data/c.txt"));
int i = 0;
byte [] bt = new byte[10];
while((i=in.read(bt))!=-1){
System.out.print(i+"\t"+new String(bt));
/**
* System.out.println(bt);返回哈希码[B@6a6824be
* 长度不满10位,会用空位补齐
*/
}
}
@org.junit.Test
public void test_IO() throws IOException{
//将某网页的源码保存为文件
FileInputStream in = new FileInputStream(new File("Data/d.html"));
FileOutputStream out = new FileOutputStream(new File("Data/d1.html"));
int i = 0;
byte [] bt = new byte[1024];
while((i=in.read(bt))!=-1){
out.write(bt,0,i);
}
out.close();
in.close();
System.out.println("success");
}
}

java study文件读写的更多相关文章

  1. 沉淀再出发:java的文件读写

    沉淀再出发:java的文件读写 一.前言 对于java的文件读写是我们必须使用的一项基本技能,因此了解其中的原理,字节流和字符流的本质有着重要的意义. 二.java中的I/O操作 2.1.文件读写的本 ...

  2. Java的文件读写操作

    file(内存)----输入流---->[程序]----输出流---->file(内存) 当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStr ...

  3. Java的文件读写操作 <转>

    目录: file内存----输入流----程序----输出流----file内存 java中多种方式读文件 判断文件是否存在不存在创建文件 判断文件夹是否存在不存在创建文件夹 java 写文件的三种方 ...

  4. [转]Java的文件读写操作

    file(内存)----输入流---->[程序]----输出流---->file(内存) 当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStr ...

  5. java 实现文件读写操作

    import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /* JAVA IO 读写操作 20 ...

  6. java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射

    java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer. Mapped ...

  7. java IO文件读写例子(OutputStream,InputStream,Writer,Reader)

    一,File创建文件 File file = new File("D:" + File.separator + "yi.txt"); 代码示例: package ...

  8. java写文件读写操作(IO流,字符流)

    package copyfile; import java.io.*; public class copy { public static void main(String[] args) throw ...

  9. java写文件读写操作(IO流,字节流)

    package copyfile; import java.io.*; public class copy { public static void main(String[] args) throw ...

随机推荐

  1. 玩转X-CTR100 l STM32F4 l TB6612直流电机调速控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的直流调速电机控制,X ...

  2. SharePoint SSS(Security Store Service)服务-PowerShell

    1. 获取SSS应用程序的标识 Get-SPServiceApplication 2. 获取指定的SSS应用程序实例 $sss = Get-SPServiceApplication -Identity ...

  3. 深入理解uwsgi和gunicorn网络模型

    前言: 去年10月份建了一个python技术群,到现在为止人数已经涨到700人了.最一开始我经常在群里回应大家的问题,不管是简单还是困难的,我都会根据自己的经验来交流. 让人新奇的是一些初学者关注最多 ...

  4. MAC 设置环境变量path的常用方法

    单个用户设置 1)~/.bash_profile (任意一个文件中添加用户级环境变量) (注:Linux 里面是 .bashrc 而 Mac 是 .bash_profile) 若bash shell是 ...

  5. 使用Nginx实现灰度发

     灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式.AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到 ...

  6. java反射机制的作用与优点

    java的反射机制就是增加程序的灵活性,避免将程序写死到代码里,例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码, ...

  7. (3)什么是函数(函数的定义、形参、实参、默认形参、可变长函数args|kwargs)

    什么是函数 函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需调用其函数名即可 1.减少重复代码 2.使程序变的可扩展 3.使程序变得易维护 定义函数的语法 形参 主要的作 ...

  8. HTML第二课——css

    请关注公众号:自动化测试实战 先给大家提个建议,就是用sublime编辑器来编写.用其他的也无所谓,我只是建议,因为这个会帮你自动补全很多代码. css概念 css叫层叠样式表.意思就是一层一层的叠加 ...

  9. J​A​V​A​中​S​t​r​i​n​g​对​象​的​比​较

    JAVA中String对象的比较 1.首先介绍三个String对象比较的方法:(1)equals:比较两个String对象的值是否相等.例如: String str1 = "hello qu ...

  10. harbor helm 仓库使用

    harbor 已经支持helm 私服仓库了,还是比较方便的 安装 下载在线安装包 wget https://storage.googleapis.com/harbor-releases/release ...