LineNumberReader
跟踪行号的缓冲字符输入流
此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号
构造方法
public LineNumberReader(Reader in)使用默认输入缓冲区的大小创建新的行编号 reader
成员方法
public int getLineNumber()获得当前行号
public void setLineNumber(int lineNumber)设置当前行号
使用
LineNumberReader lineNumberReader = new LineNumberReader(new FileReader("lnr.txt"));
// System.out.println("lineNumberReader.getLineNumber():+lineNumberReader.getLineNumber());
lineNumberReader.setLineNumber(10);
String line = null;
while ((line = lineNumberReader.readLine()) != null) {
System.out.println(lineNumberReader.getLineNumber() + " : " + line);
}
内存操作流
用于处理临时的数据,程序结束,数据消失,不需要调用释放资源close()方法
字节数组
ByteArrayInputStream
ByteArrayOutputStream
public byte[] toByteArray()创建一个新分配的 byte 数组,其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中
使用
//创建对象
ByteArrayOutputStream bStream= new ByteArrayOutputStream();
//写数据
for (int i = 0; i < 10; i++) {
bStream.write(("hello"+i).getBytes());
}
//释放资源 不需要调用close()方法
//bStream.close();
//以上已经把数据写到内存中
byte[] by = bStream.toByteArray();
ByteArrayInputStream bStream2 = new ByteArrayInputStream(by);
int by1 = 0;
while ((by1= bStream2.read())!=-1) {
System.out.print((char)by1);
}
//释放资源 不需要调用close()方法
//bStream2.close();
字符数组
CharArrayReader
CharArrayWriter
字符串
StringReader
StringWriter
读写基本数据类型流
DataInputStream
读取基本 Java 数据类型
构造方法
public DataInputStream(InputStream in)使用指定的底层 InputStream 创建一个 DataInputStream
DataOutputStream
将基本Java 数据类型写入输出流中
构造方法
DataOutputStream(OutputStream out)
注意点
使用DataInputStream读取的顺序一定要和DataOutputStream写入时的顺序一致,否则出现问题
使用
public static void main(String[] args) throws IOException {
write();
read();
}
public static void write() throws IOException {
DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("dos.txt"));
dataOutputStream.writeInt(10);
dataOutputStream.writeShort(11);
dataOutputStream.writeChar('b');
dataOutputStream.writeDouble(12.58);
dataOutputStream.writeBoolean(true);
dataOutputStream.writeLong(1454444L);
dataOutputStream.writeFloat(1.457F);
dataOutputStream.writeByte(34);
dataOutputStream.close();
}
public static void read() throws IOException {
DataInputStream dataInputStream = new DataInputStream(new FileInputStream("dos.txt"));
int i = dataInputStream.readInt();
short s = dataInputStream.readShort();
char c = dataInputStream.readChar();
double d = dataInputStream.readDouble();
boolean b = dataInputStream.readBoolean();
long l = dataInputStream.readLong();
float f = dataInputStream.readFloat();
byte by = dataInputStream.readByte();
dataInputStream.close();
System.out.println(i);
System.out.println(d);
System.out.println(c);
System.out.println(b);
System.out.println(l);
System.out.println(f);
System.out.println(by);
System.out.println(s);
}
打印流
字符打印流:PrintWriter
向文本输出流打印对象的格式化表示形式
与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,
而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符
构造方法
public PrintWriter(String fileName)throws FileNotFoundException
创建具有指定文件名称且不带自动行刷新的新 PrintWriter
此便捷构造方法创建必要的中间 OutputStreamWriter,后者将使用此 Java 虚拟机实例的默认 charset 进行字符编码
public PrintWriter(OutputStream out,boolean autoFlush)
通过现有的 OutputStream 创建新的 PrintWriter
此便捷构造方法创建必要的中间 OutputStreamWriter,后者使用默认字符编码将字符转换为字节
字节打印流:PrintStream
打印流的特点:
1、只有写数据的,没有读数据
2、可操作任意类型数据
3、若启动了自动刷新则自动刷新
4、该流是可以直接操作文本文件的
FileInputStream
FileOutputStream
FileReader
FileWriter
PrintStream
PrintWriter
1、如何操作任意类型数据
print()
println()
2、启动自动刷新
public PrintWriter(OutputStream out,boolean autoFlush)
换行:
println()等价于
bw.write()
bw.newLine()
bw.flush()
流:
基本流:能够直接读写
高级流:在基本流基础上提供了一些高级功能
使用
PrintWriter printWriter= new PrintWriter("pw.txt");
PrintWriter printWriter= new PrintWriter(new FileOutputStream("pw.txt"),true);
//printWriter.write("haha");
//printWriter.write(100);
//printWriter.print("nihao");
//printWriter.print(100);
printWriter.println("nihao");
printWriter.println(100);
printWriter.close();
复制文本:
// 创建数据源对象
BufferedReader bufferedReader = new BufferedReader(new FileReader("PrintWriterDemo.java"));
// 目标地对象
PrintWriter pWriter = new PrintWriter(new FileWriter("copy.java"), true);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
pWriter.println(line);
}
// 释放资源
bufferedReader.close();
pWriter.close();