zoukankan      html  css  js  c++  java
  • java中文件操作大全

     

    java中文件操作大全 

            本文为本人在工作学习中的总结,每个方法都经过测试,记在博客上一方面是为了自己日后工作方便,另一方面是为了给大家提供方便,节约时间。

     一.获得控制台用户输入的信息

    /**获得控制台用户输入的信息
         * 
    @return
         * 
    @throws IOException
         
    */

        
    public String getInputMessage() throws IOException{
            System.out.println(
    "请输入您的命令∶");
            
    byte buffer[]=new byte[1024];
            
    int count=System.in.read(buffer);
            
    char[] ch=new char[count-2];//最后两位为结束符,删去不要
            for(int i=0;i<count-2;i++)
                ch[i]
    =(char)buffer[i];
            String str
    =new String(ch);
            
    return str;
        }

    可以返回用户输入的信息,不足之处在于不支持中文输入,有待进一步改进。

    二.复制文件

    1.以文件流的方式复制文件

    /**以文件流的方式复制文件
         * 
    @param src 文件源目录
         * 
    @param dest 文件目的目录
         * 
    @throws IOException  
         
    */

        
    public void copyFile(String src,String dest) throws IOException{
            FileInputStream in
    =new FileInputStream(src);
            File file
    =new File(dest);
            
    if(!file.exists())
                file.createNewFile();
            FileOutputStream out
    =new FileOutputStream(file);
            
    int c;
            
    byte buffer[]=new byte[1024];
            
    while((c=in.read(buffer))!=-1){
                
    for(int i=0;i<c;i++)
                    out.write(buffer[i]);        
            }

            in.close();
            out.close();
        }

    该方法经过测试,支持中文处理,并且可以复制多种类型,比如txt,xml,jpg,doc等多种格式

    2.利用FileChannel和ByteBuffer来复制文件

         /**复制文件
          * 
    @author 崔红保
          * 
    @param oldpath 以前的目录
          * 
    @param newpath  新目录
          * 
    @param filename 文件名
          * 
    @throws IOException
          
    */

         
    public void copyFile(String oldpath,String newpath,String filename) throws IOException{
              FileChannel in
    =new FileInputStream(oldpath+File.separator+filename).getChannel();
              FileChannel out
    =new FileOutputStream(newpath+File.separator+filename).getChannel();
              ByteBuffer buffer
    =ByteBuffer.allocate(1024);
              
    while(in.read(buffer)!=-1){
                   buffer.flip();
                   out.write(buffer);
                   buffer.clear();
              }

              in.close();
              out.close();
         }

    但是,在实际操作中,上述方法并不是处理该类操作的最佳方法,我们可以用transferTo方法或transferFrom来实现。

    3.利用transferTo方法实现文件复制

         /**复制文件
          * 
    @author 崔红保
          * 
    @param oldpath 以前的目录
          * 
    @param newpath  新目录
          * 
    @param filename 文件名
          * 
    @throws IOException
          
    */

         
    public void copyFile(String oldpath,String newpath,String filename) throws IOException{
              FileChannel in
    =new FileInputStream(oldpath+File.separator+filename).getChannel();
              FileChannel out
    =new FileOutputStream(newpath+File.separator+filename).getChannel();
              in.transferTo(
    0,in.size(),out);
              in.close();
              out.close();
         }

    三.写文件

    1.利用PrintStream写文件

    /**
         * 文件输出示例
         
    */

        
    public void PrintStreamDemo(){
            
    try {
                FileOutputStream out
    =new FileOutputStream("D:/test.txt");
                PrintStream p
    =new PrintStream(out);
                
    for(int i=0;i<10;i++)
                    p.println(
    "This is "+i+" line");
            }
     catch (FileNotFoundException e) {
                e.printStackTrace();
            }

        }

    2.利用StringBuffer写文件

    public void StringBufferDemo() throws IOException...{
            File file
    =new File("/root/sms.log");
            
    if(!file.exists())
                file.createNewFile();
            FileOutputStream out
    =new FileOutputStream(file,true);        
            
    for(int i=0;i<10000;i++)...{
                StringBuffer sb
    =new StringBuffer();
                sb.append(
    "这是第"+i+"行:前面介绍的各种方法都不关用,为什么总是奇怪的问题 ");
                out.write(sb.toString().getBytes(
    "utf-8"));
            }
            
            out.close();
        }

    该方法可以设定使用何种编码,有效解决中文问题。

    3.利用BufferedWriter写入文件内容

     

        /**
         * 
    @param filename
         
    */

        
    public void writeFile(String filename){
            File file
    =new File(filename);
            
            
    try {
                
    if(!file.exists())
                    file.createNewFile();
                FileWriter fw
    =new FileWriter(file,true);//传入true表示如果该文件存在,则将新内容添加到文件末尾
                BufferedWriter bw=new BufferedWriter(fw);
                
    for(int i=0;i<1000;i++)
                    bw.write(
    "这是第"+(i+1)+"行,应该没错哈 ");
                
    //关闭
                bw.close();
                bw
    =null;
                fw.close();
                fw
    =null;
            }
     catch (IOException e) {
                e.printStackTrace();
            }
     
        }
    利用Buffer操作IO速度会稍微快一点。

    四.文件重命名

        /**文件重命名
         * 
    @param path 文件目录
         * 
    @param oldname  原来的文件名
         * 
    @param newname 新文件名
         
    */

        
    public void renameFile(String path,String oldname,String newname){
            
    if(!oldname.equals(newname)){//新的文件名和以前文件名不同时,才有必要进行重命名
                File oldfile=new File(path+"/"+oldname);
                File newfile
    =new File(path+"/"+newname);
                
    if(newfile.exists())//若在该目录下已经有一个文件和新文件名相同,则不允许重命名
                    System.out.println(newname+"已经存在!");
                
    else{
                    oldfile.renameTo(newfile);
                }
     
            }
             
        }

    注:如果重命名的目标文件已经存在,则不会进行任何操作

    五.转移文件目录

    转移文件目录不等同于复制文件,复制文件是复制后两个目录都存在该文件,而转移文件目录则是转移后,只有新目录中存在该文件。

        /**转移文件目录
         * 
    @param filename 文件名
         * 
    @param oldpath 旧目录
         * 
    @param newpath 新目录
         * 
    @param cover 若新目录下存在和转移文件具有相同文件名的文件时,是否覆盖新目录下文件,cover=true将会覆盖原文件,否则不操作
         
    */

        
    public void changeDirectory(String filename,String oldpath,String newpath,boolean cover){
            
    if(!oldpath.equals(newpath)){
                File oldfile
    =new File(oldpath+"/"+filename);
                File newfile
    =new File(newpath+"/"+filename);
                
    if(newfile.exists()){//若在待转移目录下,已经存在待转移文件
                    if(cover)//覆盖
                        oldfile.renameTo(newfile);
                    
    else
                        System.out.println(
    "在新目录下已经存在:"+filename);
                }

                
    else{
                    oldfile.renameTo(newfile);
                }

            }
           
        }

    六.读文件

    1.利用FileInputStream读取文件

    2.利用BufferedReader读取

    在IO操作,利用BufferedReader和BufferedWriter效率会更高一点

    3.利用dom4j读取xml文件

        /**从目录中读取xml文件
         * 
    @param path 文件目录
         * 
    @return
         * 
    @throws DocumentException
         * 
    @throws IOException
         
    */

        
    public Document readXml(String path) throws DocumentException, IOException{
            File file
    =new File(path);
            BufferedReader bufferedreader 
    = new BufferedReader(new FileReader(file));
            SAXReader saxreader 
    = new SAXReader();
            Document document 
    = (Document)saxreader.read(bufferedreader);
            bufferedreader.close();
            
    return document;
        }
    七.创建文件(文件夹)
    1.创建文件夹
     /**创建文件夹
         * 
    @param path  目录
         
    */

        
    public void createDir(String path){
            File dir
    =new File(path);
            
    if(!dir.exists())
                dir.mkdir();
        }

    2.创建新文件
    /**创建新文件
         * 
    @param path 目录
         * 
    @param filename 文件名
         * 
    @throws IOException
         
    */

        
    public void createFile(String path,String filename) throws IOException{
            File file
    =new File(path+"/"+filename);
            
    if(!file.exists())
                file.createNewFile();
        }
    八.删除文件(目录)
    1.删除文件
        /**删除文件
         * 
    @param path 目录
         * 
    @param filename 文件名
         
    */

        
    public void delFile(String path,String filename){
            File file
    =new File(path+"/"+filename);
            
    if(file.exists()&&file.isFile())
                file.delete();
        }

    2.删除目录
    要利用File类的delete()方法删除目录时,必须保证该目录下没有文件或者子目录,否则删除失败,因此在实际应用中,我们要删除目录,必须利用递归删除该目录下的所有子目录和文件,然后再删除该目录。
     /**递归删除文件夹
         * 
    @param path
         
    */

        
    public void delDir(String path){
            File dir
    =new File(path);
            
    if(dir.exists()){
                File[] tmp
    =dir.listFiles();
                
    for(int i=0;i<tmp.length;i++){
                    
    if(tmp[i].isDirectory()){
                        delDir(path
    +"/"+tmp[i].getName());
                    }

                    
    else{
                        tmp[i].delete();
                    }

                }

                dir.delete();
            }

        }

        /**读文件
         * 
    @param path
         * 
    @return
         * 
    @throws IOException
         
    */

        
    public String BufferedReaderDemo(String path) throws IOException{
            File file
    =new File(path);
            
    if(!file.exists()||file.isDirectory())
                
    throw new FileNotFoundException();
            BufferedReader br
    =new BufferedReader(new FileReader(file));
            String temp
    =null;
            StringBuffer sb
    =new StringBuffer();
            temp
    =br.readLine();
            
    while(temp!=null){
                sb.append(temp
    +" ");
                temp
    =br.readLine();
            }

            
    return sb.toString();
        }

        /**读文件
         * 
    @param path
         * 
    @return
         * 
    @throws IOException
         
    */

        
    public String FileInputStreamDemo(String path) throws IOException{
            File file
    =new File(path);
            
    if(!file.exists()||file.isDirectory())
                
    throw new FileNotFoundException();
            FileInputStream fis
    =new FileInputStream(file);
            
    byte[] buf = new byte[1024];
            StringBuffer sb
    =new StringBuffer();
            
    while((fis.read(buf))!=-1){
                sb.append(
    new String(buf));    
                buf
    =new byte[1024];//重新生成,避免和上次读取的数据重复
            }

            
    return sb.toString();
        }

  • 相关阅读:
    数据库从sql 2000迁移到SQL 2005遇到的问题
    转:好用的抓取dump的工具ProcDump
    普通程序员回顾2010
    jQuery 结合 Json 提交数据到Webservice,并接收从Webservice返回的Json数据
    matplotlib 设置图形大小时 figsize 与 dpi 的关系
    Pandas 常见用法个人随笔
    python f.readlines() 会耗完所有内存
    推荐系统学习材料
    查看更多折叠动画(中间内容高度不确定)
    Entity Framework CodeFirst For Oracle
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330283.html
Copyright © 2011-2022 走看看