java读取文件写入到word文档中

来源:互联网 发布:杀戮汉化 知乎 编辑:程序博客网 时间:2024/06/06 20:31

今天突然想要看看流对文件的读取写入操作,之前一直没有怎么弄过关于流这方面,最近要做的项目会用到所以看了看别人的东西,现在就简单的发表下心得,希望大家多多提出意见,我们共同进步,一起走上技术巅峰

下面直接上代码,我在代码中加了一些注释,大家可以对照API,查看相应的方法都是怎么用的.如果兄弟有理解不好的还望多多指出,进步是一条我们互相指出毛病的过程


//读取所有的文件
public List<String> fileScan(File file,String postfix){
   File []filen=file.listFiles(); //获取改路径名下的所有文件
   for(int i=0;i<filen.length;i++)
   {
    if(filen[i].isFile()){ //检验改路径名表示的文件是否是一个标准文件
     if(filen[i].getName().endsWith(postfix)){  //此处可改变
   
     list.add(filen[i].getPath()); //将给抽象的路径名转换为路径名字符串并添加到list集合中
     System.out.println(filen[i].getPath());
     }
    }
    else
     fileScan(filen[i],postfix); //通过递归找到所有符合条件的对象
   }
   return list;
   }

在上面的方法中我们通过File类中的listFiles()方法,源文件路径名下的所有文件的数组,然后遍历数组,通过判断当前文件是否是标准文件,是否是以我们指定的后缀名为结尾的来筛选出我们想要的文件,然后将读取到的文件的路径抽象名称通过getPath()方法获取到字符串格式的路径名称,

下面来对读取到的文件内容向word文档中进行写入操作

//写入到word文档中
public void writeDoc(List<String> list,String outPath){ //将找到的符合条件的对象集合写入到word文档中
StringBuffer sb=new StringBuffer();
System.out.println("共扫描出"+list.size()+"个文件");
for (int i = 0; i < list.size(); i++) {
try{
File f2=new File(list.get(i).toString());//通过API我们看到new File(String s)中的参数接收的是String类型的
BufferedReader br=new BufferedReader(new FileReader(f2));//通过字符缓冲流读取
String line=br.readLine();//遍历文件中的内容,通过\r或者\n作为每次读取结束的标识
while(line!=null)
{
sb.append(line+"\r\n");
line=br.readLine();
}
File f=new File(outPath); 
appendLog(f, sb.toString()+"\n\n\n==========================================================");
br.close();


}
catch(Exception e)
{
e.printStackTrace();
}
sb.replace(0, sb.length(), ""); //清空sb
}
System.out.println("写入完成");
}

在这里使用了流的通道形式,使用了更宽广的BufferReader的来读取相对窄小的FileReader,官方语言来讲这样使得IO的资源消耗降低了,这个时候一定会有人会有疑问为什么呢,大家可以看这里 点击打开链接, readLIine这个方法每次读取到\r或者\n的时候都会结束然后再次重新进行读取,当全部文件读取完毕后,返回null,然后调用我们封装的打印方法

public  void appendLog(File log,String newLog)
{
Scanner sc=null;
PrintWriter pw=null;
try{
if(!log.exists())//如果文件不存在,则新建.
{
   File parentDir=new File(log.getParent());
   if(!parentDir.exists())//如果所在目录不存在,则新建.
    parentDir.mkdirs();//创建最外层目录
   log.createNewFile();//创建包含改文件名称的所有目录
 }
  //把要插入的数据放在sc里面
  sc=new Scanner(log);
  StringBuilder sb=new StringBuilder();
  while(sc.hasNextLine())//先读出旧文件内容,并暂存sb中; 
  {
  //把要插入的数据加到文件中
   sb.append(sc.nextLine());
  sb.append("\r\n");//换行符作为间隔,扫描器读不出来,因此要自己添加
  }
  sc.close();
  
  pw=new PrintWriter(new  FileWriter(log),true);
   /*A.*/pw.println(sb.toString());//,写入旧文件内容.
  /*B.*/pw.println(newLog);//写入新内容额




 
 }
 catch(IOException ex)
 {
  ex.printStackTrace();
 }
 finally{
 pw.close();
 }


}

在进行打印之前我们首先要进行文件和文件住文件夹是否存在,当不存在时通过mkdirs()和createNewFile()来进行主文件夹的创建和创建一个空文件,接下来的就是我们将文件打印到word文件中了

水平有限,希望大家多多指教

原创粉丝点击