IO流:内存与存储设备之间传输数据的通道
- 数据借助流传输
- 输入流:将<存储设备>中的内容读入到内存中
- 输出流:将<内存>中的内容写入到<存储设备>中
- 文件 -> Input -> 程序 -> Output -> 文件
-
字节流:读写所有数据
-
字符流:读写文本数据
-
节点流:实际读写传输数据;
-
过滤流:节点流之上增强功能
InputStream和OutputStream是所有字节流的超类
- 一般由子类实现
- 一次只能操作一个字节
package com.li.changGe.ioStream.byteStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class FileInputOutputStreamDemo01 {
private static String fileName = "C:\\Users\\林木\\Desktop/test.txt";
public static void main(String[] args){
try {
//fileInputStreamTest();
fileOutputStreamTest();
}catch (Exception e){
e.printStackTrace();
}
}
public static void fileInputStreamTest() throws Exception{
/**
* 文件字节流
*
* 如果不写盘符,默认从当前项目下找
*/
InputStream fileInputStream = new FileInputStream(fileName);
byte[] bytes = new byte[10];
int count;
//----------------------------------------------------
/**
* read()返回读到的字节数,
* 读完时会返回-1
*
* 单字节读取
*/
/*while ((count = fileInputStream.read()) != -1){
//O ever youthful,O ever weeping.
System.out.print((char)count);
}*/
/**
* 读取自定义的缓冲区中(数组)
*/
while ((count = fileInputStream.read(bytes)) != -1){
/**
* 基本类型没有重写toString()
* [B@14ae5a5
* [B@14ae5a5
* [B@14ae5a5
* [B@14ae5a5
*/
//System.out.println(bytes.toString());
//O ever youthful,O ever weeping.
System.out.println(new String(bytes,0,count));
/**
* 如果最后一次读取时,剩余的字符不够数组长度了
* 数组就会残留上一次的数据
* O ever youthful,O ever weeping.r weeping
*/
//System.out.print(new String(bytes,0,bytes.length));
}
fileInputStream.close();
}//fileInputStreamTest()
//------------------------------------------------------
public static void fileOutputStreamTest() throws Exception{
/**
* true=开启追加:将新数据追加到原文件中数据的后面
* 默认不写是覆盖原文件数据
*/
OutputStream fileOutputStream = new FileOutputStream(fileName,true);
String message = "Hello world!";
fileOutputStream.write(message.getBytes());
System.out.println("追加完毕");
fileOutputStream.close();
}//fileOutputStreamTest()
}
将文件复制到新文件中
package com.li.changGe.ioStream.byteStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* 将文件复制到新文件中
*/
public class FileInputOutputStreamFileCopyDemo01 {
private static String fileName = "C:\\Users\\林木\\Desktop/UID.jpg";
private static String fileName1 = "C:\\Users\\林木\\Desktop/UID1.jpg";
public static void main(String[] args) throws Exception{
FileInputStream fileInputStream = new FileInputStream(fileName);
//没有文件时会自动创建文件
FileOutputStream fileOutputStream = new FileOutputStream(fileName1);
byte[] bytes = new byte[10];
int count;
//-------------------------------------------------------
while ((count = fileInputStream.read(bytes)) != -1){
fileOutputStream.write(bytes,0,count);
}
System.out.println("写入完毕");
//-------------------------------------------------------
//由近到外的关闭
fileOutputStream.close();
fileInputStream.close();
}
}