文件读写

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

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. DevExpress v18.1新版亮点——WinForms篇(八)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v18.1 的新功能,快来下载试用新版本! ...

  2. 一起来点React Native——常用组件之Text

    一.什么是Text组件? 一个用于显示文本的React组件,和Android中的TextView组件或者OC中的Label组件相类似,专门用来显示基本的文本信息:除了基本的显示布局之外,可以进行嵌套显 ...

  3. Linux环境下 多线程下载 (Python 实现版)

    本文是多年前学习编程时参照一个网友程序的基础之上改写的, 采用Python语音编写, 多线程下载功能, 可以有效提高Linux下原有下载工具中的一些不足,以下给出具体代码. #!/usr/bin/py ...

  4. .NET练习计算平方根

    1.新建Windows窗体 2.窗体中添加控件:TextBox(文本框).Button(按钮).和Label(标签) 3.为Button对象添加点击事件代码 点击事件代码设计思路 ①从文本框中获取输入 ...

  5. Ubuntu python-opcua Test

    /********************************************************************************* * Ubuntu python-o ...

  6. 【转】Python判断字符串是否为字母或者数字

    str_1 = " str_2 = "Abc" str_3 = "123Abc" #用isdigit函数判断是否数字 print(str_1.isdi ...

  7. jquery的常用操作(操作html页面的Dom对象的元素)

    一:页面加载完成时,会执行jquery的方法(不需要等待图片加载完成,只要dom结构加载完成,就执行该方法) //第一种写法: $(document).ready(function() { // 执行 ...

  8. leetcode:Symmetric Tree【Python版】

    #error caused by:#1:{} 没有考虑None输入#2:{1,2,2} 没有控制h和t#3:{4,-57,-57,#,67,67,#,#,-97,-97} 没有考虑负号,将s从str变 ...

  9. 使用rewrite 让php 实现类似asp.net 的IHttpModule 进行带参数js文件的参数获取

    asp.net 的IHttpModule 接口具有很大的作用,我们可以使用实现的模块进行全局的控制,但是在学习php 的过程中也想实现类似的功能,查找php 的文档,自己没有找到, 但是我们大家应该知 ...

  10. Javascript 在严格模式下禁止指向 this

    如下代码, f() 输出的是 false,而 f2() 输出的是 true. 这是因为 f2 在严格模式下禁止 this 指向全局,所以 this 是 undefined, !this 当然是 tru ...