有两种方法分别是通过数组和字符拼接读取文件内容(本质为复制粘贴)
一,字符拼接是通过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函数可以读取文件。读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用