1 import java.io.BufferedReader; 2 import java.io.File; 3 import java.io.FileNotFoundException; 4 import java.io.FileReader; 5 import java.io.FileWriter; 6 import java.io.IOException; 7 import java.io.LineNumberReader; 8 import java.text.SimpleDateFormat; 9 import java.util.Date; 10 11 /** 12 * 这是一个与日志读写有关的类,定义了一些通用的方法 13 * 14 * @author Devon 15 * 16 */ 17 public class LogReaderWriter { 18 19 public static int getTotalLines(String fileName) throws IOException { 20 FileReader in = new FileReader(fileName); 21 LineNumberReader reader = new LineNumberReader(in); 22 String strLine = reader.readLine(); 23 int totalLines = 0; 24 while (strLine != null) { 25 totalLines++; 26 strLine = reader.readLine(); 27 } 28 reader.close(); 29 in.close(); 30 return totalLines; 31 } 32 33 public static void readForPage(String filePath, int pageNo, int pageSize) throws IOException { 34 File file = new File(filePath); 35 FileReader in = new FileReader(file); 36 LineNumberReader reader = new LineNumberReader(in); 37 String s = ""; 38 /*if (lineNumber <= 0 || lineNumber > getTotalLines(sourceFile)) { 39 System.out.println("不在文件的行数范围(1至总行数)之内。"); 40 System.exit(0); 41 } */ 42 int startRow = (pageNo - 1) * pageSize + 1; 43 int endRow = pageNo * pageSize; 44 int lines = 0; 45 System.out.println("startRow:" + startRow); 46 System.out.println("endRow:" + endRow); 47 while (s != null) { 48 lines++; 49 s = reader.readLine(); 50 if (lines >= startRow && lines <= endRow) { 51 System.out.println("line:" + lines + ":" + s); 52 } 53 } 54 reader.close(); 55 in.close(); 56 } 57 58 /** 59 * 60 * @param filePath 文件路径的字符串表示形式 61 * @param KeyWords 查找包含某个关键字的信息:非null为带关键字查询;null为全文显示 62 * @return 当文件存在时,返回字符串;当文件不存在时,返回null 63 */ 64 public static String readFromFile(String filePath, String KeyWords) { 65 StringBuffer stringBuffer = null; 66 File file = new File(filePath); 67 if (file.exists()) { 68 stringBuffer = new StringBuffer(); 69 FileReader fileReader = null; 70 BufferedReader bufferedReader = null; 71 String temp; 72 try { 73 fileReader = new FileReader(file); 74 bufferedReader = new BufferedReader(fileReader); 75 while ((temp = bufferedReader.readLine()) != null) { 76 if (KeyWords == null) { 77 stringBuffer.append(temp).append("\n"); 78 } else { 79 if (temp.contains(KeyWords)) { 80 stringBuffer.append(temp).append("\n"); 81 } 82 } 83 } 84 } catch (FileNotFoundException e) { 85 //e.printStackTrace(); 86 } catch (IOException e) { 87 //e.printStackTrace(); 88 } finally { 89 try { 90 if (fileReader != null) { 91 fileReader.close(); 92 } 93 } catch (IOException e) { 94 //e.printStackTrace(); 95 } 96 try { 97 if (bufferedReader != null) { 98 bufferedReader.close(); 99 } 100 } catch (IOException e) { 101 //e.printStackTrace(); 102 } 103 } 104 } 105 if (stringBuffer == null) { 106 return null; 107 } else { 108 return stringBuffer.toString(); 109 } 110 111 } 112 113 /** 114 * 将指定字符串写入文件。如果给定的文件路径不存在,将新建文件后写入。 115 * 116 * @param log 要写入文件的字符串 117 * @param filePath 文件路径的字符串表示形式,目录的层次分隔可以是“/”也可以是“\\” 118 * @param isAppend true:追加到文件的末尾;false:以覆盖原文件的方式写入 119 * @return 文件是否写入成功 120 */ 121 public static boolean writeIntoFile(String log, String filePath, boolean isAppend) { 122 boolean isSuccess = true; 123 File file = new File(filePath); 124 if (!file.exists()) { 125 createNewFile(filePath); 126 } 127 //将logs写入文件 128 FileWriter fileWriter = null; 129 try { 130 fileWriter = new FileWriter(file, isAppend); 131 fileWriter.write(log + "\n"); 132 fileWriter.flush(); 133 } catch (IOException e) { 134 isSuccess = false; 135 //e.printStackTrace(); 136 } finally { 137 try { 138 if (fileWriter != null) { 139 fileWriter.close(); 140 } 141 } catch (IOException e) { 142 //e.printStackTrace(); 143 } 144 } 145 146 return isSuccess; 147 } 148 149 /** 150 * 创建文件,如果该文件已存在将不再创建(即不起任何作用) 151 * 152 * @param filePath 要创建文件的路径的字符串表示形式,目录的层次分隔可以是“/”也可以是“\\” 153 * @return 创建成功将返回true;创建不成功则返回false 154 */ 155 public static boolean createNewFile(String filePath) { 156 boolean isSuccess; 157 //创建文件 158 File file = new File(filePath); 159 try { 160 isSuccess = file.createNewFile(); 161 } catch (IOException e) { 162 isSuccess = false; 163 } 164 return isSuccess; 165 } 166 167 public static void main(String[] args) { 168 String filename = "b.txt"; 169 170 String str; 171 for (int i = 0; i < 100; i++) { 172 str = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()) + " - 插入数据" + i; 173 writeIntoFile(str, filename, true); 174 } 175 176 try { 177 long time = System.currentTimeMillis(); 178 int count = getTotalLines(filename); 179 System.out.println(System.currentTimeMillis() - time); 180 181 System.out.println("当前文件总行数: " + count); 182 readForPage(filename, 10, 10); 183 } catch (IOException ex) { 184 ex.printStackTrace(); 185 } 186 } 187 }
时间: 2024-10-10 02:54:17