package com.myjava; import java.io.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Created by 14061371 on 2017/5/12. */ public class FileUtils { //获取当前路径 /** 按字节读取 * * @param fileName */ public static void readFileByBytes(String fileName){ File file=new File(fileName); if(!file.exists()){ return; } InputStream in = null; try { in = new FileInputStream(file); byte[] tempbytes = new byte[100]; int byteread = 0; in = new FileInputStream(fileName); // 读入多个字节到字节数组中,byteread为一次读入的字节数 while ((byteread = in.read(tempbytes)) != -1) { System.out.write(tempbytes, 0, byteread); } } catch (IOException e) { e.printStackTrace(); }finally { if (in != null) { try { in.close(); } catch (IOException e1) { } } } } /** * 按字符读取 * @param fileName */ public static void readFileByChars(String fileName){ File file=new File(fileName); if(!file.exists()){ return; } Reader reader=null; try { reader=new InputStreamReader(new FileInputStream(file)); int tempChart; char[] tempchars = new char[30]; while((tempChart=reader.read(tempchars))!=-1){ System.out.print(tempchars); } } catch (IOException e) { e.printStackTrace(); }finally{ if(reader!=null){ try{ reader.close(); }catch (IOException e){ } } } } /** * 按行读取 * @param fileName */ public static void readFileByLines(String fileName){ File file=new File(fileName); if(!file.exists()){ return; } BufferedReader reader=null; try { reader=new BufferedReader(new FileReader(file)); String tempString=null; int line=1; while((tempString=reader.readLine())!=null){ System.out.println(line+tempString); line++; } reader.close(); } catch (IOException e) { e.printStackTrace(); }finally{ if(reader!=null){ try{ reader.close(); }catch(IOException e){ } } } } /** * random读取文件 * @param fileName */ public static void readFileByRandomAccess(String fileName){ RandomAccessFile randomFile=null; try { randomFile=new RandomAccessFile(fileName,"r"); long fileLength=randomFile.length(); randomFile.seek(0); byte[] bytes=new byte[10]; int byteread=0; while((byteread=randomFile.read(bytes))!=-1){ System.out.write(bytes,0,byteread); } } catch (IOException e) { e.printStackTrace(); }finally { if (randomFile != null) { try { randomFile.close(); } catch (IOException e) { } } } } /** * 读取文件最后N行 * * 根据换行符判断当前的行数, * 使用统计来判断当前读取第N行 * * PS:输出的List是倒叙,需要对List反转输出 * * @param file 待文件 * @param numRead 读取的行数 * @return List<String> */ public static List<String> readLastNLine(File file, long numRead) { // 定义结果集 List<String> result = new ArrayList<String>(); //行数统计 long count = 0; // 排除不可读状态 if (!file.exists() || file.isDirectory() || !file.canRead()) { return null; } // 使用随机读取 RandomAccessFile fileRead = null; try { //使用读模式 fileRead = new RandomAccessFile(file, "r"); //读取文件长度 long length = fileRead.length(); //如果是0,代表是空文件,直接返回空结果 if (length == 0L) { return result; } else { //初始化游标 long pos = length - 1; while (pos > 0) { pos--; //开始读取 fileRead.seek(pos); //如果读取到 代表是读取到一行 if (fileRead.readByte() == ' ') { //使用readLine获取当前行 String line = fileRead.readLine(); //保存结果 result.add(line); //打印当前行 // System.out.println(line); //行数统计,如果到达了numRead指定的行数,就跳出循环 count++; if (count == numRead) { break; } } } if (pos == 0) { fileRead.seek(0); result.add(fileRead.readLine()); } } } catch (IOException e) { e.printStackTrace(); } finally { if (fileRead != null) { try { //关闭资源 fileRead.close(); } catch (Exception e) { } } } Collections.reverse(result); return result; } /** * 使用RandomAccessFile追加文件 * @param fileName */ public static void appendFileByAccess(String fileName,String content){ try { RandomAccessFile randomFile=new RandomAccessFile(fileName,"rw"); long fileLength=randomFile.length(); randomFile.seek(fileLength); randomFile.writeBytes(content); randomFile.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 使用FileWriter 追加文件内容 * @param fileName * @param content */ public static void appendFile(String fileName,String content){ try { FileWriter writer=new FileWriter(fileName,true); writer.write(content); writer.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 往文件头插入数据 * @param filename * @param pos * @param insertContent */ public static void insert(String filename, int pos, String insertContent){ RandomAccessFile raf=null; FileOutputStream tmpOut=null; FileInputStream tmpIn=null; try{ File tmp = File.createTempFile("tmp", null); tmp.deleteOnExit(); raf = new RandomAccessFile(filename, "rw"); tmpOut = new FileOutputStream(tmp); tmpIn = new FileInputStream(tmp); raf.seek(pos);//首先的话是0 byte[] buf = new byte[64]; int hasRead = 0; while ((hasRead = raf.read(buf)) > 0) { //把原有内容读入临时文件 tmpOut.write(buf, 0, hasRead); } raf.seek(pos); raf.write(insertContent.getBytes()); //追加临时文件的内容 while ((hasRead = tmpIn.read(buf)) > 0) { raf.write(buf, 0, hasRead); } }catch (IOException e) { e.printStackTrace(); }finally{ try { if (raf != null) { raf.close(); } if (tmpOut != null) { tmpOut.close(); } if (tmpIn != null) { tmpIn.close(); } } catch (IOException e) { } } } }