文件IO的几种方式

记录:对于文件IO操作方法的,后期可以用于数据驱动测试自动化中的针对文件用例或者Excel用户参数的读取、写入执行

  1 public class FileTest {
  2 
  3     /**
  4      * 在当前目录下创建文件
  5      *
  6      * @param fileName
  7      */
  8     public void createFile(String fileName) {
  9         try {
 10             String currentFilePath = FileTest.class.getResource("/").toURI().getPath();
 11             String pathFileName = currentFilePath + "\\" + fileName;
 12             File file = new File(pathFileName);
 13             boolean bRet = file.createNewFile();
 14             if (bRet) {
 15                 System.out.println(pathFileName + "--新文件创建成功");
 16             } else {
 17                 System.out.println(pathFileName + "--新文件创建失败");
 18             }
 19         } catch (Exception e) {
 20             e.printStackTrace();
 21         }
 22     }
 23 
 24     /**
 25      * 根据指定的目录,查询当前目录下的所有子目录名
 26      *
 27      * @param dirName     路径名
 28      * @param allFileName 所有文件的名称
 29      */
 30 
 31     public void getDirAllFileName(String dirName, List<String> allFileName) {
 32         if (dirName != null && allFileName != null) {
 33             File file = new File(dirName);
 34             if (file.exists()) {
 35                 File[] files = file.listFiles();
 36                 for (File f : files) {
 37                     if (f.isDirectory()) {
 38                         String subPath = f.getPath();             //获得子目录的文件名
 39                         getDirAllFileName(subPath, allFileName);      //递归
 40                     } else {
 41                         allFileName.add(dirName + "------" + f.getName());
 42                     }
 43                 }
 44             }
 45         } else {
 46             System.out.println("入参为null");
 47         }
 48     }
 49 
 50     /**
 51      * 读取文件,返回文件对应的字节数组
 52      *
 53      * @param fileName
 54      * @return
 55      */
 56     public List<Byte> readFile(String fileName) {
 57         List<Byte> bytes = new ArrayList<Byte>(1024 * 100);
 58         File file = new File(fileName);
 59         try {
 60             FileInputStream fileInputStream = new FileInputStream(file);
 61             FileOutputStream outputStream = new FileOutputStream("F:\\stream1.jpg");
 62             byte[] bs = new byte[1024];
 63             int iCount;
 64             while ((iCount = fileInputStream.read(bs)) != -1) {
 65                 for (Byte bt : bs) {
 66                     bytes.add(bt);
 67                 }
 68                 outputStream.write(bs);                 //一次写一个缓冲区的数据
 69             }
 70             fileInputStream.close();    //关闭字节流
 71             outputStream.close();
 72         } catch (Exception e) {
 73             e.printStackTrace();
 74         }
 75         return bytes;
 76     }
 77 
 78     /**
 79      * 把字节流数组写入指定的文件中
 80      *
 81      * @param bytes
 82      * @param pathFileName
 83      * @throws Exception
 84      */
 85     public void writeFile(List<Byte> bytes, String pathFileName) throws Exception {
 86         if (bytes != null && pathFileName != null) {
 87             File file = new File(pathFileName);
 88             try {
 89                 FileOutputStream fileOutputStream = new FileOutputStream(file);
 90                 byte[] bt = new byte[bytes.size()];
 91                 for (int i = 0; i < bytes.size(); i++) {
 92                     bt[i] = bytes.get(i);
 93                 }
 94                 fileOutputStream.write(bt);
 95                 fileOutputStream.close();
 96             } catch (Exception e) {
 97                 e.printStackTrace();
 98             }
 99         }
100     }
101 
102     /**
103      * 读取文本文件
104      *
105      * @param fileName
106      * @return
107      */
108     public String readTextFile(String fileName) {
109         StringBuilder builder = new StringBuilder();
110         if (fileName != null) {
111             BufferedReader in = null;
112             try {
113                 in = new BufferedReader(new FileReader(fileName));     //用缓存提高效率
114                 String str;
115                 while ((str = in.readLine()) != null) {
116                     builder.append(str);
117                     System.out.println(str);
118                 }
119             } catch (Exception e) {
120                 e.printStackTrace();
121             } finally {
122                 if (in != null) {
123                     try {
124                         in.close();
125                     } catch (Exception e) {
126                         e.printStackTrace();
127                     }
128                 }
129             }
130         }
131 
132         return builder.toString();
133     }
134 }

相应的测试类:

public class TestReader {
    public static void main(String[] args) {
        FileTest fileTest = new FileTest();
        String strRet = fileTest.readTextFile("F:\\aa.txt");
    }
}
public class TestRecursive {
    public static void main(String[] args) {
        FileTest fileTest = new FileTest();
        String dirName = "D:\\WorkSpace";
        List<String> allFileName = new ArrayList<String>(200);
        fileTest.getDirAllFileName(dirName, allFileName);
        for (String filename : allFileName) {
            System.out.println(filename);
        }
        System.out.println("一共有:" + allFileName.size() + "文件");
    }
}
public class TestStream {
    public static void main(String[] args){
        FileTest fileTest = new FileTest();
        String file  = "F:\\stream.jpg";
        List<Byte> bytes =  fileTest.readFile("F:\\t0132e5ce657c0702ac.jpg");
        System.out.println("文件大小:"+ bytes.size());
  /*      try{
            fileTest.writeFile(bytes,file);
            System.out.println(file+"复制成功");
        }catch (Exception e){
            e.printStackTrace();
        }*/

    }
}

写了个Log类,用于不使用Log4j时的轻量化处理

 1 public class Log {
 2     public static void writeError(String strSource, String errMsg) {
 3         PrintWriter out = null;
 4         try {
 5             String path = Log.class.getResource("/").toURI().getPath();
 6             String pathFileName = path + "\\" + "errlog";
 7             File file = new File(pathFileName);
 8             if (!file.exists()) {
 9                 file.createNewFile();
10             }
11             out = new PrintWriter(new BufferedWriter(new FileWriter(file,true)));
12             SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
13             out.println(sd.format(new Date()));
14             out.println(strSource);
15             out.println(errMsg);
16             out.println("");
17         } catch (Exception e) {
18             e.printStackTrace();
19         } finally {
20             if (out != null) {
21                 try {
22                     out.close();
23                 } catch (Exception e) {
24                     e.printStackTrace();
25                 }
26             }
27         }
28     }
29 }

相关测试:

public class TestLog {
    public static void main(String[] args){
        Log.writeError("FileTest-->>readTxtFile","数据库连接失败");
        Log.writeError("FileTest-->>writeFile","连接中断");
        Log.writeError("FileTest-->>readFile","IO错误");
    }
}

 

posted @ 2017-09-29 16:08  转圈又是原点  阅读(457)  评论(0编辑  收藏  举报