`
JavaCrazyer
  • 浏览: 3011932 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

Java IO流各种使用方式总结

阅读更多

  ①针对普通文本的复制常用方式:

FileInputStream fis = new FileInputStream(tempFile);
FileOutputStream fos = new FileOutputStream(new File(dest));
byte[] buff = new byte[1024];
int len = -1;
while ((len = fis.read(buff)) != -1) {
	fos.write(buff, 0, len);
}
fis.close();
fos.flush();
fos.close();
②效率比较高的复制方式:
第一种用法
/*2、用新IO里的FileChannel方式*/
FileChannel srcCh = new FileInputStream(src).getChannel();
FileChannel destCh = new FileOutputStream(dest).getChannel();
destCh.transferFrom(srcCh, 0, srcCh.size());
srcCh.close();
destCh.close();
第二种用法
 fIn = new FileInputStream(args[0]);
fOut = new FileOutputStream(args[1]);
fIChan = fIn.getChannel();
fOChan = fOut.getChannel();
fSize = fIChan.size();
mBuf = fIChan.map(FileChannel.MapMode.READ_ONLY, 0, fSize);
fOChan.write(mBuf); // this copies the file
fIChan.close();
fIn.close();
③删除N天前的文件(定期删备份文件)
比如删除目录中超过一个星期的所有文本文件
/**
  * 删除备份数据库文件 注意:指定删除的文件为最后一次修改的文件日期,不是按照文件名也不是
  * 文件所创建的日期。指定的path必须是目录名,否则函数不会执行并且没有返回值。
  * 
  * @param day
  *            天数
  * @param path
  *            路径目录名
  */
 public static void deletedb(int day, String path) {
  long datenum;
  Date date;
  Date datenow;
  Calendar cal = Calendar.getInstance();
  Calendar calnow = Calendar.getInstance();
  File filepath = CsvOperate.filepathpreproc(path);
  File[] files;
  if (filepath.exists()) {
   if (filepath.isDirectory()) {
    files = filepath.listFiles();
    for (int i = 0; i < files.length; i++) {
     date = new Date(files[i].lastModified());
     datenow = new Date();
     cal.setTime(date);
     calnow.setTime(datenow);
     int dec = calnow.get(Calendar.DAY_OF_YEAR)
       - cal.get(Calendar.DAY_OF_YEAR);
     // 删除指定日期的文件
     if (dec >= day) {
      files[i].delete();
     }
    } // end for
   } // end if (filepath.isdirectory())
  } // end if (filepath.exists())
 }
 /**
  * 文件路径预处理,将windows或unix like 路径转化为统一的unix like路径,如果用户输入有误则返回null
  * 
  * @param pathstr
  * @return
  */
 public static File filepathpreproc(String pathstr) {
  pathstr = pathstr.replaceAll("\\\\", "/").trim();
  // system.out.println(pathstr);
  Pattern p = Pattern.compile("(^\\.|^/|^[a-za-z])?:?/.+(/$)?");
  Matcher m = p.matcher(pathstr);
  // 不符合要求直接返回
  if (!m.matches()) {
   return null;
  }
  // 这里开始文件名已经符合要求
  File path = new File(pathstr);
  return path;
 }
④另奉完整复制示例
public class PrintFiles {
 String sourcDir = "";
 String desDir = "";
 File file = null;
 String logFile = "";
 public PrintFiles(String root,String sourcDir,String desDir,String logFile){
  this.file = new File(root);
  this.sourcDir = sourcDir;
  this.desDir = desDir;
  this.logFile = logFile;
 }
 /*
  * @method检查指定的源目的文件夹是否存在
  */
 public int checkDirName(){
  File [] fileArray = file.listFiles();
  boolean flag_desDir = false;
  boolean flag_sourceDir = false;
  for(int i=0;i<fileArray.length;i++){
   if(fileArray[i].getName().equalsIgnoreCase(sourcDir)){ 
    flag_sourceDir = true;
   }
   if(fileArray[i].getName().equalsIgnoreCase(desDir)){
    flag_desDir = true;
   }
   if(flag_desDir&&flag_sourceDir){
    break;
   }
  }
  if(!flag_desDir){
   File d = new File(file.toString().replace('\\', '/')+desDir);
   d.mkdir();
  }
  if(!flag_sourceDir){
   return 1;
  }
  return 2; 
 }
 /*
  * @method执行文件拷贝功能
  */
    public String  copyFiles(){   
     String root = file.toString().replace( '\\' , '/');
     File [] fileArray = new File(root+sourcDir).listFiles();
     for(int i=0;i<fileArray.length;i++){
      String filename = fileArray[i].getName();
      if(filename.endsWith(".txt")){
       try {
        FileInputStream fileInputStream = new FileInputStream(root+sourcDir+"/"+filename);
        FileOutputStream fileOutputStream = new FileOutputStream(root+desDir+"/"+filename);
        byte [] b = new byte[1024*5];
        int len;
        while((len=fileInputStream.read(b))!=-1){
         fileOutputStream.write(b, 0, len);
        }
        fileOutputStream.flush();
        fileOutputStream.close();
        fileInputStream.close();
        writeToLog(root+"/"+logFile, filename);
        
       } catch (FileNotFoundException e) {
        e.printStackTrace();
        return "FileNotFoundException";
       }catch(IOException e){
        e.printStackTrace();
        return "IOException";
       }}}
     return "OK";    
    }
 /*
  * @method写入日志
  */
    public String writeToLog(String logName,String data){
     File logfile = new File(logName);
     if(!logfile.exists()){
      try{
       logfile.createNewFile();
      }catch(IOException e){
       e.printStackTrace();
      }
     }else{
      StringBuffer sb = new StringBuffer();      
      try{
       if (data != null && data.length() > 0){        
        BufferedReader br = new BufferedReader(
          new InputStreamReader(
            new FileInputStream(logfile)));
        String tempdata = null;
        while((tempdata=br.readLine())!= null){
         sb.append(tempdata+"\n");
        }
        br.close();
       }
       PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(logfile)), true);
       pw.write(sb.toString());
       pw.write(data);
       pw.flush();
       pw.close();
      }catch(Exception e){
       e.printStackTrace();
      }
     }
     return "";
    }
    public   static   void   main(String[]   args)   throws   Exception   {   
     String copy = "";
     PrintFiles pf = new  PrintFiles("e:/","wx1","wx2","ss.log");  
        int i = pf.checkDirName();
        if(i==1){
         System.out.println("源文件夹不存在");
        }else if(i==2){
         System.out.println("完成检查");
         copy = pf.copyFiles();
         System.out.println("拷贝检查");
        }     
        if(copy.equalsIgnoreCase("FileNotFoundException")){
         System.out.println("FileNotFoundException");
        }else if(copy.equalsIgnoreCase("IOException")){
         System.out.println("IOException");
        }
    }
}

 

 

3
1
分享到:
评论

相关推荐

    Java io流总结

    Java io流的总结

    JAVA_IO流学习总结

    JAVA_IO流学习总结

    JavaIO流详细总结

    下面是对Java IO流的详细总结: 1. 流的概念: 流是一种抽象的数据传输方式,可以将数据从一个地方传输到另一个地方。Java中的流分为输入流和输出流,分别用于读取和写入数据。流按照处理数据的不同类型,又可以...

    Java IO流 总结

    Java IO流总结 Java IO流是Java语言中最基本和最重要的输入/输出机制,负责将数据从外部世界输入到Java应用程序中或将数据从Java应用程序输出到外部世界。IO流可以分为两大类:字节流和字符流。 1. 节点流:离数据...

    《JAVA_IO流学习总结》

    总结来说,Java IO流是一个庞大的体系,覆盖了从基础的文件操作到复杂的网络通信,理解并熟练掌握这一部分将极大地提升Java开发者的技能。通过学习和实践,开发者可以灵活地处理各种数据输入输出场景,为应用程序...

    javaIO流知识大总结

    在这个大总结中,我们将深入探讨Java IO流的基本概念、分类、常用类以及实践应用。 1. **基本概念** - **流(Stream)**:在Java中,流是一个抽象的概念,代表数据的有序序列。它可以是字节流或字符流,流向可以是...

    JAVAIO流学习总结(转)

    这是别人总结的很有实用价值的javaIO流教程。

    JavaIO总结

    有关Java输入输出流的总结有关Java输入输出流的总结有关Java输入输出流的总结

    Java IO流总结

    Java IO流是Java平台中处理输入输出操作的核心组件,它允许程序与各种数据源(如文件、设备、网络连接)进行交互。IO流系统由多个类和接口组成,它们位于java.io包中,为开发者提供了读写数据的丰富功能。在Java中,...

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。

    io流各种组合使用与总结

    ### Java IO流的各种组合使用与总结 在Java中,输入/输出(IO)流是进行数据读取和写入操作的基础。本文将详细介绍Java中IO流的多种组合使用方法,并结合示例代码来阐述每种配置的具体应用。 #### 1. 带缓冲的文件...

    Java-Io流,练习

    总结来说,Java的IO流是一个庞大且重要的主题,涵盖了数据的输入、输出、缓冲、转换等多个方面。对于初学者而言,理解和掌握IO流的基本概念、分类以及常用类的用法是至关重要的。通过实践练习,可以加深对IO流的理解...

    JAVA的IO流总结

    java的IO流总结:包含Inputstream,OutputStream,writer和reader

    java IO流+socket源码 实现简单文本传输

    总结一下,Java IO流提供了丰富的数据传输工具,而Socket是网络通信的核心。通过结合两者,我们可以构建强大的网络应用,例如文件传输、聊天室等。对于初学者来说,理解这些基础概念并实践编写相关代码,将有助于...

    Java基础篇:IO流.pdf

    总结来说,Java IO流是处理文件和网络数据传输的核心组件,理解其原理和分类有助于更高效地进行数据处理。通过合理地组织和管理IO流,可以在不同的应用场合下灵活使用,满足各种数据输入输出的需求。

    java基础之IO流

    ### Java IO流基础知识点 #### 一、IO流概述 - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、...

    个人资料Java io流

    总结一下,Java IO流是Java处理输入输出的重要工具,包括字节流和字符流,以及丰富的子类和接口。通过熟练掌握这些API,开发者可以有效地读写文件、网络数据,甚至实现对象的序列化。在个人资料管理中,根据不同的...

    JAVA IO流的增删改查

    自已写了一个JAVA IO流的增删改查操作, 算是对IO的总结吧,初学者可以看下!

    javaio流学习总结.pdf

    JavaIO流学习总结 JavaIO流是Java语言中最基本的输入/输出机制,它提供了多种方式来读取和写入数据。下面是JavaIO流的学习总结。 一、 IO流的分类 IO流可以从不同的角度进行分类,包括: * 按流的方向分为:输入...

Global site tag (gtag.js) - Google Analytics