文件读写
Java中通过流来读写文件,流是指一连串流动的字符,是以先进先出方式发送信息的通道。
输入/输出流与数据源:
Java流的分类:
输入输出流是相对于计算机内存来说的。
字节流与字符流的区别
字符流的底层就是字节流。而字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容,而字节流读取单位为byte。byte作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等。基于B/S和C/S的文件传输都可以采用字节流的形式。在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。
字节流就是按照字节来进行传输,字符流是按照字符来传输.最基本的是字节流,字符流可以说是对字节流的一个包装流,比如你知道了一个字符是8个字节,那么你让字节流一次传输8个字节,那不就相当于一次传输一个字符,也就是字符流了。
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?
实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,如图:
创建文件和读取文件徳实操:
package com.zwy.demo2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class StreamTest {
public static void byteWrite() {
File file = new File("d:\\test\\test.txt");
try {
OutputStream outputStream = new FileOutputStream(file);
String textString = "Hello World!!!";
byte[] data = textString.getBytes();
outputStream.write(data);
//outputStream.close();
} catch (IOException e) {
System.out.println("字节流写入文件出错。");
e.printStackTrace();
}
}
/*
* 读取文件
*/
public static String read(String fileName) {
File f = new File(fileName);
if (!f.exists()) {
return "File not found!";
}
FileInputStream fs;
String result = null;
try {
fs = new FileInputStream(f);
byte[] b = new byte[fs.available()];
fs.read(b);
fs.close();//释放资源
result = new String(b);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
StreamTest.byteWrite();
String result = StreamTest.read("d:\\test\\test.txt");
System.out.println(result);
}
}