java-字符流
字符输出流
类 BufferedWriter
构造方法摘要 | |
---|---|
BufferedWriter(Writer out) 通过一个字符输出流创建缓冲字符输出流。 | |
BufferedWriter(Writer out, int sz) 通过一个字符输出流创建一个指定缓冲区的大小的缓冲字符输出流。 |
package com.Kweilin_Fang.test;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class FileWriterClass {
public static void main(String[] args) throws Exception {
//字符输出流
//FileWriter构造方法
File file1=new File("G:"+File.separator+"testfile"+File.separator+"myfile.txt");
FileWriter out1=new FileWriter(file1);
File file2=new File("G:"+File.separator+"testfile"+File.separator+"myfile.txt");
FileWriter out11=new FileWriter(file2,true);
String path="G:"+File.separator+"testfile"+File.separator+"myfile2.txt";
FileWriter out111=new FileWriter(path);
String path1="G:"+File.separator+"testfile"+File.separator+"myfile2.txt";
FileWriter out1111=new FileWriter(path1,true);
//上转型对象创建字符输出流对象
File file3=new File("G:"+File.separator+"testfile"+File.separator+"myfile.txt");
Writer out5=new FileWriter(file3);
Writer out6=new FileWriter(file3,true);
String path11="G:"+File.separator+"testfile"+File.separator+"myfile2.txt";
Writer out11111=new FileWriter(path11);
Writer out111111=new FileWriter(path11,true);
}
}
void | write(String str) 写入字符串。 |
---|---|
void | write(char[] cbuf) 写入字符数组。 |
void | write(char[] cbuf, int off, int len) 将字符数组中的从off开始的len个数据写出到字符输出流。 |
void | write(int c) 一次写出一个字符数据字符输出流。 |
void | write(String str, int off, int len) 将字符串中的从off开始的len个数据写出到字符输出流。 |
void | close()关闭此流 |
void | newLine() 写入一个行分隔符。[\r\n] |
package com.Kweilin_Fang.test;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class FileWriterClass2 {
public static void main(String[] args) throws Exception {
//使用字符输出流写出方法完成数据写出
//创建字符输出流
/**File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
FileWriter out1=new FileWriter(file,true);
//准备需要输出的数据
String info="helle,你好";
out1.write(info);
//关闭字符输出流
out1.close();*/
/**
//写出字符数组
File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest1.txt");
FileWriter out1=new FileWriter(file,true);
//准备需要输出的数据
String info="helle,你好";
//将被写出的字符串数据转换成字符数组
char[] array=info.toCharArray();
out1.write(array);
//关闭字符输出流
out1.close();
*/
/**
//写出字符串中的部分数据
File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest2.txt");
FileWriter out1=new FileWriter(file,true);
//准备需要输出的数据
String info="helle,你好";
out1.write(info,0,5);
//关闭字符输出流
out1.close();*/
/**
File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest3.txt");
FileWriter out1=new FileWriter(file,true);
//准备需要输出的数据
String info="helle,你好";
char array[]=info.toCharArray();
out1.write(array,0,5);
//关闭字符输出流
out1.close();*/
/**File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest4.txt");
FileWriter out1=new FileWriter(file,true);
//out1.write(97);
//由于int和cha可以进行数据类型转换
//char数据类型可以隐士类型转换成int型
out1.write('D');
//关闭字符输出流
out1.close();*/
//上面的方法运行一次,只能写出一个字符的数据,我们现在需要使用上面的这个方法写出一字符串数据
//利用循环方式写出字符串
File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest5.txt");
FileWriter out1=new FileWriter(file,true);
String info="hello,wrold";
char array[]=info.toCharArray();
for (char c : array) {
out1.write(c);
}
out1.close();
}
}
字符输入流
构造方法摘要 | |
---|---|
BufferedReader(Reader in) 通过字符输入流创建一个缓冲字符输入流。 | |
BufferedReader(Reader in, int sz) 通过字符输入流创建一个指定缓冲区大小的缓冲字符输入流 |
package com.Kweilin_Fang.test;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class FileReaderClass {
public static void main(String[] args) throws Exception {
// 字符输入流
//构造方法
File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
FileReader in=new FileReader(file);
String path="G:"+File.separator+"testfile"+File.separator+"myfiletest.txt";
FileReader in1=new FileReader(path);
//上转型对象创建字符输入流对象
File file1=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
Reader in11=new FileReader(file);
String path1="G:"+File.separator+"testfile"+File.separator+"myfiletest.txt";
Reader in111=new FileReader(path1);
}
}
读取数据
int | read()读取单个字符,返回值作为整数读取的字符,范围在 0 到 65535 之间,到达流的末尾,返回 -1 |
---|---|
int | read(char[] cbuf, int offset, int length) 读入数组中的某一部分 返回值读取的字符数,到达流的末尾,返回 -1 |
int | read(char[] cbuf) 将字符读入数组。 返回值读取的字符数,如果已到达流的末尾,则返回 -1 |
void | close() 关闭该流并释放与之关联的所有资源。 |
String | readLine() 读取一个文本行。 返回值包含该行内容的字符串,不包含任何行终止符,到达流末尾,返回 null |
package com.Kweilin_Fang.test;
import java.io.File;
import java.io.FileReader;
public class FileReaderClass2 {
public static void main(String[] args) throws Exception {
// 字符输入流读取文件的数据内容
//创建一个字符输入对象·
/**File file = new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
FileReader in=new FileReader(file);
//创建字符数组
char array[]=new char[(int) file.length()];
int len=in.read(array);
//将保存有数据的字符数组转换成String打印控制台
String info=new String(array,0,array.length);
System.out.println(info);
in.close();*/
//读取某一部分数据
//创建字符输入流对象
/**File file = new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
FileReader in=new FileReader(file);
//创建字符数组
char array[]=new char[(int) file.length()];
@SuppressWarnings("unused")
int len=in.read(array,0,5);
String info=new String(array,0,array.length);
System.out.println("读取到的数据是=="+info);
//关闭输入流对象
in.close();*/
//一次读取一个字符数据
//创建字符输入流对象
/**File file = new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
FileReader in=new FileReader(file);
int data=in.read();
char val=(char) data;
System.out.println("读取到的单个数据是=="+val);
in.close();*/
File file = new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
FileReader in=new FileReader(file);
//创建字符数组保存数据
char array[]=new char[(int) file.length()];
//定义保存的数据的单个字符变量
int temp=0;
int len=0;
while((temp=in.read())!=-1 ){
array[len]=(char) temp;
len++;
}
//将字符数组转换成字符串
String info=new String(array,0,len);
System.out.println("读取到的数据是=="+info);
}
}
字节流补充
字节流 DataOutputStream
FilterOutputStream继承OutputStream,FilterOutputStream是一个OutputStream的子类。
DataOutputStream是FilterOutputStream的子类。
DataOutputStream是OutputStream的子类。
构造方法摘要 | |
---|---|
DataOutputStream(OutputStream out) 通过一个指定的字节输出流创建出一个DataOutputStream对象。 |
package com.Kweilin_Fang.test;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class DataOutputStreamClass {
public static void main(String[] args) throws Exception {
// 字节输出流 DataOutputStream
//构造方法
//DataOutputStream(OutputStream out) 通过一个指定的字节输出流创建出一个DataOutputStream对象。
File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
FileOutputStream out=new FileOutputStream(file);
DataOutputStream data = new DataOutputStream(out);
//上转型
File file1=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
OutputStream out1=new FileOutputStream(file1);
DataOutputStream data1 = new DataOutputStream(out1);
}
}
实例方法:
void | write(byte[] b) 将 b.length 个字节写入此输出流。 |
---|---|
void | write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。 |
void | write(int b)将指定 byte 写入此输出流。 |
void | writeByte(int v) 将一个 byte 值以 1-byte 值形式写出到基础输出流中。 |
void | writeShort(int v) 将一个 short 值以 2-byte 值形式写入基础输出流中,先写入高字节。 |
void | writeInt(int v) 将一个 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。 |
void | writeLong(long v) 将一个 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。 |
void | writeFloat(float v) 使用 Float 类中的 floatToIntBits 方法将 float 参数转换为一个 int 值,然后将该 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。 |
void | writeDouble(double v) 使用 Double 类中的 doubleToLongBits 方法将 double 参数转换为一个 long 值,然后将该 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。 |
void | writeChar(int v) 将一个 char 值以 2-byte 值形式写入基础输出流中,先写入高字节。 |
void | writeBoolean(boolean v) 将一个 boolean 值以 1-byte 值形式写入基础输出流。 |
void | writeBytes(String s) 将字符串按字节顺序写出到基础输出流中。 |
void | writeChars(String s) 将字符串按字符顺序写入基础输出流。 |
void | writeUTF(String str) 以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。 |
通过观察上面的DataOutputStream方法提供的写出方法,就可以执行,原来这个输出流可以直接写出各种类型的数据而不需要将被写出的数据转换成字节数组
缺点:在写出数据的时候,将被写出的数据自动转换成了2进制数据保存至文件,文件中保存的实际上是被写出数据的2进制,但是由于文本文件他们的字符编码不一样,导致保存在文件中的2进制数据成为乱码。
总结:优点不需要将数据转换成字节数组,缺点保存在文件中的数据是乱码。
package com.Kweilin_Fang.test;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class DataOutputStreamClass2 {
public static void main(String[] args) throws Exception {
// 字节输出流 DataOutputStream
//构造方法
//DataOutputStream(OutputStream out) 通过一个指定的字节输出流创建出一个DataOutputStream对象。
File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletestA.txt");
FileOutputStream out=new FileOutputStream(file);
DataOutputStream data = new DataOutputStream(out);
//写出一个姓名
data.writeUTF("张三");
//写出一个字符
data.writeChar('\t');
//写出一个整数
data.writeInt(23);
//写出一个字符
data.writeChar('\t');
//写出一个小数
data.writeDouble(168.23);
//写出一个字符
data.writeChar('\t');
//写出一个布尔型
data.writeBoolean(true);
//关闭流
out.close();
data.close();
}
}
构造方法摘要 | |
---|---|
DataInputStream(InputStream in) 通过一个指定的字节输入流创建出一个DataInputStream对象。 |
package com.Kweilin_Fang.test;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class DataInputStreamClass {
public static void main(String[] args) throws Exception {
// 字节输入流 DataOutputStream
//构造方法
//DataOutputStream(OutputStream out) 通过一个指定的字节输入流创建出一个DataOutputStream对象。
File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
FileInputStream out=new FileInputStream(file);
DataInputStream data = new DataInputStream(out);
//上转型
File file1=new File("G:"+File.separator+"testfile"+File.separator+"myfiletest.txt");
InputStream out1=new FileInputStream(file1);
DataInputStream data1 = new DataInputStream(out1);
}
}
实例方法:
int | read() 从此输入流中读取下一个数据字节。 |
---|---|
int | read(byte[] b) 从此输入流中将 byte.length 个字节的数据读入一个 byte 数组中。 |
int | read(byte[] b, int off, int len) 从此输入流中将 len 个字节的数据读入一个 byte 数组中。 |
byte | readByte() 读取并返回一个输入字节。 |
short | readShort() 读取两个输入字节并返回一个 short 值。 |
int | readInt() 读取四个输入字节并返回一个 int 值。 |
long | readLong() 读取八个输入字节并返回一个 long 值。 |
float | readFloat() 读取四个输入字节并返回一个 float 值。 |
double | readDouble() 读取八个输入字节并返回一个 double 值。 |
char | readChar() 读取两个输入字节并返回一个 char 值。 |
boolean | readBoolean() 读取一个输入字节,如果该字节不是零,则返回 true,如果是零,则返回 false。 |
String | readUTF() 读入一个已使用 UTF-8 修改版格式编码的字符串。 |
package com.Kweilin_Fang.test;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
public class DataInputStreamClass2 {
public static void main(String[] args) throws Exception{
// 字节输入流 DataOutputStream
//构造方法
//DataOutputStream(OutputStream out) 通过一个指定的字节输入流创建出一个DataOutputStream对象。
File file=new File("G:"+File.separator+"testfile"+File.separator+"myfiletestA.txt");
FileInputStream in=new FileInputStream(file);
DataInputStream data = new DataInputStream(in);
String name=data.readUTF();
char t=data.readChar();
byte b=data.readByte();
char t1=data.readChar();
int in1=data.readInt();
char t4=data.readChar();
boolean bool=data.readBoolean();
char t2=data.readChar();
double d=data.readDouble();
in.close();
data.close();
System.out.println("读取的数据是=="+ name+ t+ t4+b+ bool+t2+d);
}
}