1.字节流FileInputStream读文本文件
FileInputStream称为文件输入流,它是字节输入流InputStream抽象类的一个子类,它的作用是将文件中的数据输入到内部存储器(简称内存)中,可以利用它来读取文本文件中的数据,具体实现步骤如下:
1)导入相关的类
import java.io.IOException;
import java.io.InputStream;
import java.io.FileInputStream;
2)构造一个文件输入流对象
InputStream fileObject = new FileInputStream("text.txt");//此时的文件输入流对象fileObject就和源数据源(text.txt)关联起来。
3)利用文件输入流类的方法读取文本文件中的数据
fileObject.available();//可读取的字节
fileObject.read();//读取文件的数据
4)关闭文件输入流对象
fileObject.close();
代码举例说明:
public static void main(String[] args) {
// 创建一个File对象,指向某个文件
File file = new File("E:/a.txt");//我这里的a.txt的内容是aqwerdfg
// 创建FileInputStream类对象,读取指定文件内的数据
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
StringBuffer sb = new StringBuffer();
//将文件内容全部读取
while (true) {
int num = fis.read();//读取fis对象指定的a.txt文件内的数据
if (num == -1) {
break;
}
sb.append((char) num);
}
System.out.print(sb);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//不管前面有没有读取到数据,流最终是要关闭
try {
if(fis!=null){
fis.close();//关闭流
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.字节流FileOutputStream写文本文件
FileOutputStream称为文件输出流,它是字节输出流OutputStream抽象类的子类,它的作用是把内存中的数据输出到文件中,可以利用它把内存中的数据写入到文本文件中,具体实现步骤如下:
1)导入相关的类
import java.io.IOException;
import java.io.OutputStream;
import java.io.FileOutputStream;
2)构造一个文件输出流对象
OutputStream fos = new FileOutnputStream("text.txt");//此时的文件输出流对象fos就和目标数据源(text.txt)关联起来。此构造方法会将写入的数据覆盖掉目标数据源(text.txt)内原来的数据
OutputStream fos = new FileOutnputStream("text.txt",true);/此构造方法会将数据添加到文件的末尾位置,不会覆盖目标数据源(text.txt)中原来已经存在的数据
3)利用文件输出流类的方法把数据写入到文本文件中。
String str = "好好学习Java";
byte[] words = str.getBytes();
fos.write(words,0,words.length);//利用write方法将数据写入到文件中去
4)关闭文件输入流对象
fos.close();
代码举例说明:
public class FileOutputStreamDemo01 {
public static void main(String[] args) throws IOException {
//创建FileOutputStream类对象
//此构造方法会将写入的数据覆盖掉指定路径文件内原来的数据
FileOutputStream fos=new FileOutputStream("E:/a.txt");
fos.write(97);//将97对应的ASCII码值写入到fos对象指向的路径的文件内
//此构造方法会将数据添加到文件的末尾位置,不会覆盖文件中原来已经存在的数据
FileOutputStream fos1=new FileOutputStream("E:/b.txt", true);
fos1.write(98);
fos.close();
fos1.close();
}
写入多个数据举例说明:
public static void main(String[] args) throws IOException {
// 创建File FileOutputStream类对象
FileOutputStream fos=new FileOutputStream("E:/b.txt",true);//fos对象指向E:/b.txt,并且数据写入到b.txt文件内数据的末尾
String str="asdfghj";
byte[] bytes=str.getBytes();//将写入的数据转换成字节数组
fos.write(bytes);//写入数据到E:/b.txt内
System.out.println("数据写入完毕");
fos.close();
}
3.FileInputStream和FileOutStream读写文件
使用FileInputStream读文件的同时使用OutputStream写文件,完成复制操作。
//读取文件的同时写入文件,即将指定路径文件复制到指定路径
public static void main(String[] args) {
// 创建FileInputStream类对象
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream("E:/b.txt");
fos=new FileOutputStream("D:/copy.txt");
//读取数据,写入数据
int num;
while((num=fis.read())!=-1){//当num=-1时,说明读取到文件内数据的末尾了
fos.write(num);
}
System.out.println("文件复制完毕");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{最终要关闭流,先开的流后关,后开的流先关
try {
fos.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}