有两种方法分别是通过数组和字符拼接读取文件内容(本质为复制粘贴)
一,字符拼接是通过StringBuilder实现的,缺点是不能打印中文
//StringBuilder 是一个字符拼接的工具类,频繁使用字符串拼接的时候可以用
先给大家看一下抛出异常时候的情况,比较好理解
代码实现如下
public static String readFile(String path) throws IOException {
FileInputStream fis = new FileInputStream(path);
StringBuilder sb = new StringBuilder();
int tmp;
while ((tmp = fis.read()) != -1) {
sb.append((char)tmp);
}
fis.close();
return sb.toString();
}
public static void main(String[] args) throws IOException {
String s = readFile("超人.txt");
System.out.println(s);
二,通过数组的方式实现,优点是既可以打印中文,也可以打印英文
//available()方法来获取文件大小,进而用来定义缓冲数组的长度。
代码如下
public static String readFileBytes(String path) throws IOException {
FileInputStream fis = new FileInputStream(path);
byte[] b=new byte[fis.available()];
fis.read(b);
fis.close();
return new String(b);
}
public static void main(String[] args) throws IOException {
String s = readFileBytes("超人.txt");
System.out.println(s);
三,代码的优化并实现复制粘贴
这里用try catch来捕捉异常,不需要抛出
public static void main(String[] args) throws IOException {
FileInputStream fis=null;
FileOutputStream fos=null;
try{
//1、创建输入流对,负责读取D:/ 我的青春谁做主.txt文件
fis= new FileInputStream("D:/我的青春谁做主.txt");
//2、创建输出流对象
fos= new FileOutputStream("C:/myFile/myPrime.txt");
//3、创建中转站数组,存放每次读取的内容
byte[] words=new byte[1024];
//4、通过循环实现文件读取
int len = -1;
while((len = fis.read(words))!=-1){
fos.write(words, 0, len);
}
//5、开始清空缓存区
fos.flush();
System.out.println("复制完成,请查看文件!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
//6、关闭流
try {
if (fos != null)
fos.close();
if (fis != null)
fis.close();
}catch (IOException e){
e.printStackTrace();//打印异常信息在程序中出错的位置及原因
}
}
}
这里的文件需要自己创建,
read的用法
read函数可以读取文件。读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用
本文介绍了两种读取文件内容的方法,包括使用StringBuilder进行字符拼接和通过字节数组读取,分别适用于英文和中文场景。同时,展示了如何优化代码实现文件的复制粘贴过程,确保数据完整传输。通过try-catch处理异常,确保流的正确关闭。
421

被折叠的 条评论
为什么被折叠?



