File类是描述文件和文件夹的,并且其中定义的方法都是围绕文件和文件夹的 *** 作展开的,但是File类有缺陷,
它无法去获取一个文件中的数据,如果我们在程序中要读取文件中存放的具体的数据,或者给文件中写数据,
这时必须使用Java中提供的IO流技术来读取:
字节流输入:InputStream 从文件到内存是输入流
字节流输出:OutputStream 从内存到文件是输出流
package int_out;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class Demo{
public static void main(String[] args ) throws Exception{
// 字节流输入和输出: *** 作英文单词
// 将Bandzip文件夹中的hi.txt文件取出到程序中
File file = new File("D:/Bandzip/hi.txt");
// 字节流输入
InputStream input = new FileInputStream(file);
// 一次读取一个,文件读完返回-1
int nub = input.read();
System.out.println((char)nub);
// 一次读取多个
byte[] buf = new byte[512];
// 用来存储
int len = -1;
String s = "";
while ((len = input.read(buf)) != -1) {
s += new String(buf);
System.out.println(s);
}
// 输出
File files = new File("D:/Bandzip/hii.txt");
// 字节流输出
// (files,true):追加文件,不会覆盖原本就有的文件
OutputStream out = new FileOutputStream(files,true);
// 将字符串转换成字节数组
byte[] ss = s.getBytes();
// 将内存中的数据输出到硬盘文件中
out.write(ss);
// 刷新,将缓冲区的文件刷到文件中
out.flush();
// 关闭流,释放资源前会刷出,再释放
out.close();
System.out.println("over");
}
}
flush和close什么区别:
flush是把缓冲区的数据刷出到文件中,没有关闭流和文件之间的关联,在刷新之后,依然可以使用流对象继续
给文件中写数据。
close方法在关闭流之前会先调用flush把缓冲区中的数据写底层文件中,然后把流和文件的关联关系断开。
一旦调用的close方法,流就已经被关闭了,就无法在使用当前这个流对象写数据。
字符流Java给我们提供专门用于 *** 作字符数据的流对象
字符输入流:Reader
字符输出流:Writer
package int_out;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo1 {
public static void main(String[] args) throws Exception {
// 字符流输入和输入: *** 作汉字
// 获取输入文件的地址
// 将Bandzip文件夹中的hi.txt文件取出到程序中
File file = new File("D:/Bandzip/hi.txt");
// 字符流输入
FileReader reader = new FileReader(file);
// 通过循环取出文件中的数据
int c = -1;
String str = "";
while ((c = reader.read()) != -1) {
str = ""+(char)c;
System.out.print(str);
}
// 获取输出文件的地址
File files = new File("D:/Bandzip/hii.txt");
// 字符流输出
FileWriter writer = new FileWriter(files,true);
String name = "lili";
String pass = "123";
// 将数据传到文件中
writer.write(name);
writer.write(pass);
// 将数据从缓冲区刷到文件
writer.flush();
System.out.println("over");
}
}
DataInputStream
在IO包中提供了两个与平台无关的数据 *** 作流
数据输出流:DataOutputStream
数据输入流:DataInputStream
package homework;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class Jpg {
public static void main(String[] args) throws Exception {
// 复制图片
// 获取到输入和输出图片的地址
File file = new File("D:/Bandzip/jpg/tu.jpg");
File files = new File("D:/Bandzip/jpg/tus.jpg");
// 导入图片
InputStream in = new FileInputStream(file);
DataInputStream dis = new DataInputStream(in);
// 导出图片
OutputStream out = new FileOutputStream(files);
DataOutputStream dos = new DataOutputStream(out);
// 存储图片
int i = -1;
// 将获取到的图片存到i
while ((i = dis.read()) != -1) {
// 将i获得的图片输出
dos.write(i);
dos.flush();
}
// 关闭流
dos.close();
out.close();
dis.close();
in.close();
System.out.println("over");
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)