常用流的介绍

Java 输入输出流中主要有几个重要的类,掌握了这几种,其他的流可以类比学习。
下面就着重学习以下的类:
Inputstream
Outputstream
FileInputstream
FileOutputstream
Reader
Writer
FileReader
FileWriter
InputStreamReader
OutputStreamReader
BufferReaderStream
BufferWriterStream
一开始不要被上面的这么多类所迷糊,尤其是什么字节流,或者字符流之类的,其实只是它们写入或者读出来的文件中不同的源文件的形式所决定的。
输入输出流仅提供一条通道程序,可以使用这条通道读取源中的数据或者把数据送到目的地。
由于到目前为止结合一些书本和视频讲解我所理解的内容,故总结出来与大家一起分享

InputStream OutputStream Reader Writer 基本知识讲解

InputStream OutputStream Reader Writer是一些底层类,同时是抽象类,由它的子类来完成流的任务,那为什么会有两种呢?
因为输入输出流中的源不同,即读写的的对象单元编码不同,可以将每种编码规则理解为一种协议,如果双方编码不同,那读出来就有可能是乱码。Java的流操作分为字节流和字符流,每种流所接收的类型不同,读写操作时要读对应的对象。InputStream OutputStream是针对字节流的,字节流中输入输出的数据是以单个字节为读写单位的,字符流是由Java虚拟机将单个字节转化为两个字节的unicode字符。Reader Writer是字符流。
一般在什么情况下使用字节流或者字符流呢?
一段二进制数据,如音频,视频,图像等,使用字节流操作比较方便,但如果操作对象是一段文本,操作时使用字节流操作,读取时应以字节流读入,如果要显示为字符,需要自己与字符的转换。但是运用面向对象的思想,我们诞生了一个直接操作文本数据的字符流。可以从JDK中看到,字符流是在JDK1.1时才有的。

FileInputstream FileOutputstream FileReader FileWriter基本知识

FileInputstream FileOutputstream Reader Writer分别是InputStream OutputStream Reader Writer
的实现子类,这个应该比较容易理解。对应的一些方法我就不介绍了。

InputStreamReader OutputStreamReader基本知识

(1) 字节输入流变成字符输入流:InputStreamReader
(2) 字节输出流变成字符输出流:OutputStreamReader
为了达到较高效率,避免频繁的进行相互转换,而应尽量用BufferWriter和BufferReader 来包装它们。
还有一些其他的类,在这里就不一 一介绍了。

对文件字节流和字符流的基本读写操作

这些基本操作,再常见的编程中经常遇到,例如从服务器中读取数据。
接下来是简单的代码演示,基本的底层类不再使用,像inputStream,outputstream,Reader,Writer等抽象类。

首先使用FileReader FileWriter对字符流进行读写操作
为了方便,将读写写在一个程序里

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class fileop {
public static void main(String[] args){
String content="hello我是中国人";
File file=new File("C:\\Users\\Administrator\\Desktop\\test\\c.txt");
char[] c=content.toCharArray();
try {
FileWriter fw=new FileWriter(file);
fw.write(c);
fw.close();
FileReader fr=new FileReader(file);
char[] c2=new char[100];
int count=0;
while((count=fr.read(c2))!=-1){
String string=new String(c2,0,count);
System.out.println(string);
}
fr.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

接下来使用字节流FileInputStream FileOutputStream 进行读写
1. 创建文件字节流输入流
FileInputStream(File file);
FileInputStream(String string);
2. read()方法以字节为单位读
int read(byte b[]);
int read(byte b[],int off,int len);
文件字节流的写的方法类似,这里不再重复
代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class input {
public static void main(String[] args) {
File file=new File("C:\\Users\\Administrator\\Desktop\\test\\a.txt");
File file2=new File("C:\\Users\\Administrator\\Desktop\\test\\c.txt");
byte[] b=new byte[100];
int count=0;
String txt="我是中国人";
byte[] b2=txt.getBytes();


try {
FileInputStream is=new FileInputStream(file);
try {
while((count=is.read(b))!=-1){
String string=new String(b,0,count);
System.out.println(string);

}
is.close();
FileOutputStream os=new FileOutputStream(file2);
os.write(b2);
os.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

利用BufferReaderStream BufferWriterStream代码进行读写,它们可以对代码以行为单位进行读写

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class demo {
public static void main(String[] args) {
String[] content={"我是中国人","我爱中国","我讨厌日本人","我讨厌韩国人"};

try {
FileWriter fw = new FileWriter("C:\\Users\\Administrator\\Desktop\\test\\c.txt");
BufferedWriter bw=new BufferedWriter(fw);
for(String str:content){
bw.write(str);
bw.newLine();
}
bw.close();
fw.close();
FileReader fr=new FileReader("C:\\Users\\Administrator\\Desktop\\test\\c.txt");
BufferedReader br=new BufferedReader(fr) ;
String string=null;
while((string=br.readLine())!=null){
System.out.println(string);
}
br.close();
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

以上这些内容就是Java输入输出流的文件操作,希望可以对大家有所帮助。

更多相关文章

  1. JAVA: 第一个只出现1次的字符
  2. 与==两个字符串的Java比较是假的? [重复]
  3. 将字符串拆分为字符串数组。
  4. java十进制字符串转十六进制字符串
  5. jQuery(JavaScript)获取文字(字符串)宽度(显示长度)
  6. Java将一个字符串中的多个连一起的空格变成单个空格

随机推荐

  1. c++万能头文件是什么?
  2. C语言中的每条可执行语句都将转换成什么
  3. c语言中*是什么意思?
  4. strcmp在c语言中是什么意思?
  5. 你知道C语言的标识符命名规则是什么吗(详
  6. main函数是C语言的唯一起点,对么
  7. 带你详细了解C++中的map(键值对)和set(集
  8. 新手学习C语言必须要知道的特点
  9. c++是一种高级程序设计语言吗?
  10. c语言中strstr函数的用法是什么?