输入流的面试问题?

来源:互联网 发布:mac系统恢复出厂设置 编辑:程序博客网 时间:2024/05/24 15:38

面试题:简述一下将文件中的数据输入到另一个文件中的步骤:

1.首先创建File 文件,并且和需要操作的文件向相关联;

2.判断文件是否存在用exists()方法,如果不存在则创建文件

3.如果是文本文件可以利用FileReader和FileWriter方法进行读写操作,如果出现乱码可以使用其父类指定编码

4.通过FileReader读取数据时候可以使用缓冲流进行处理,提高效率,创建一个BufferedReader对象

  5.创建FileWriter,同上使用缓存

下面是通过字节流和字符流两种方法处理文件的过程:

package com.io;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class FileInputStreamDemo {
public static void main(String[] args) {
// readByByte();
// readByChar();
       printJava();
}


//字节方式读取文件
static void readByByte() {
//创建文件输入流,和输出流对象
FileInputStream fi =null;
FileOutputStream fo=null;

try {
//实例化输入流,并传入输入流文件地址(两种方法)
fi=new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\from.txt"));
// fi=new FileInputStream("C:\\Users\\Administrator\\Desktop\\from.txt");
//实例化输出流,并传入输出流地址
fo=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\to.txt");

// 创建中转站数组,存放每次传输的内容
byte[] buf=new byte[1024];

//循环读取文件内容
int len=-1;//当文件读取完毕时返回-1
// fi.read(buf);//当buf足够大时候,可以不用循环
// fo.write(buf);
while ((len=fi.read(buf)) !=-1) {
//输出流写入内容,这里相当于向文件中写入信息
fo.write(buf);
// fo.write(buf, 0, len);
}
//    读完刷新输出流,作用强制清空缓冲区
  fo.flush();
  System.out.println("文件复制完毕");
} catch (Exception e) {
// TODO: handle exception
}finally {
try {
//关闭流
fo.close();
fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}




//字符方式读取文件
static void readByChar() {
//创建文件输入流,和输出流对象
FileReader fr=null;
FileWriter fw=null;

try {
//实例化输入流,并传入输入流文件地址(两种方法)
fr=new FileReader(new File("C:\\Users\\Administrator\\Desktop\\from.txt"));
// fr=new FileInputStream("C:\\Users\\Administrator\\Desktop\\from.txt");
//实例化输出流,并传入输出流地址
fw=new FileWriter("C:\\Users\\Administrator\\Desktop\\to.txt");

// 创建中转站数组,存放每次传输的内容
char[] buf=new char[1024];

//循环读取文件内容
int len=-1;//当文件读取完毕时返回-1
fr.read(buf);
fw.write(buf);
while ((len=fr.read(buf)) !=-1) {
//输出流写入内容,这里相当于向文件中写入信息
fw.write(buf);//默认从0开始,与下边的一样
// fo.write(buf, 0, len);
}
  // 读完刷新输出流,作用强制清空缓冲区
  fw.flush();
  System.out.println("文件复制完毕");
} catch (Exception e) {
// TODO: handle exception
}finally {
try {
//关闭流
fw.close();
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}




static void printJava() {
//创建文件输入流
FileInputStream fi =null;

try {
//实例化输入流,并传入输入流文件地址(两种方法)
fi=new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\Bank.java"));
// fi=new FileInputStream("C:\\Users\\Administrator\\Desktop\\from.txt");

// 创建中转站数组,存放每次传输的内容
byte[] buf=new byte[10];

//循环读取文件内容
int len=-1;//当文件读取完毕时返回-1
while ((len=fi.read(buf)) !=-1) {
System.out.print(new String(buf));
}
  System.out.println("打印完毕");
} catch (Exception e) {
// TODO: handle exception
}finally {
try {
//关闭流
fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
//类结束
}

这里对字节流和字符流方法进行了封装,还有一个控制台打印的方法,通过观察可以发现二者之间的不同。

                                   各位学友有什么不同观点的可以评论,大家一起学习!

原创粉丝点击