Ip合并
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.List; public class Fileinfo extends Object { private FileWriter writer; private BufferedWriter bw; private FileReader reader; private BufferedReader br; private FileReadCallback callbackfun; public Fileinfo() { super(); } public Fileinfo(FileReadCallback callbackfun) { super(); this.callbackfun = callbackfun; } public void setMyCallback(FileReadCallback callbackfun) { this.callbackfun = callbackfun; } public boolean deleteFile(String sPath) { boolean flag = false; File file = new File(sPath); // 路径为文件且不为空则进行删除 if (file.isFile() && file.exists()) { file.delete(); flag = true; } return flag; } public boolean IsFileExist(String sPath) { boolean flag = false; File file = new File(sPath); // 路径为文件且不为空则进行删除 if (file.isFile() && file.exists()) { flag = true; } return flag; } public boolean CheckAndCreateFile(String filepath) throws IOException { boolean flag; File file = new File(filepath); if (!file.isFile()) { file.createNewFile(); } return IsFileExist(filepath); } public void Writeindex(String filepath, String value) { try { if (writer == null) { CheckAndCreateFile(filepath); writer = new FileWriter(filepath, false); } if (bw == null) bw = new BufferedWriter(writer); writer = new FileWriter(filepath, false); bw = new BufferedWriter(writer); bw.write(value); bw.flush(); bw.close(); // System.gc(); } catch (IOException e) { e.printStackTrace(); } } public int Readlogindex(String filepath) { int result = 0; if (!IsFileExist(filepath)) { return result; } try { if (reader == null) reader = new FileReader(filepath); if (br == null) br = new BufferedReader(reader); try { String str = null; if ((str = br.readLine()) != null) { result = Integer.parseInt(str); } } finally { // reader.close(); // br.close(); } } catch (IOException e) { e.printStackTrace(); } return result; } public void Write(String filepath, boolean append, List<String> datalist) { try { if (writer == null) { CheckAndCreateFile(filepath); writer = new FileWriter(filepath, append); } if (bw == null) bw = new BufferedWriter(writer); for (String index : datalist) { bw.write(index); bw.newLine(); } bw.flush(); } catch (IOException e) { e.printStackTrace(); } } public void Write(String filepath, boolean append, String value) { try { if (writer == null) { CheckAndCreateFile(filepath); writer = new FileWriter(filepath, true); } if (bw == null) bw = new BufferedWriter(writer); bw.write(value); bw.newLine(); bw.flush(); } catch (IOException e) { e.printStackTrace(); } } public void Read(String filepath) { try { FileReader reader = new FileReader(filepath); BufferedReader br = new BufferedReader(reader); String str = null; while ((str = br.readLine()) != null) { if (callbackfun != null) { callbackfun.read(str); } } } catch (IOException e) { e.printStackTrace(); } } protected void finalize() throws Throwable { super.finalize(); System.out.println("finalize"); if (writer != null) writer.close(); if (bw != null) bw.close(); if (reader != null) reader.close(); if (br != null) br.close(); } }
import java.util.ArrayList; import java.util.List; import com.chexun.project.unit.*; public class IpMerge implements FileReadCallback { class Ipdata { long start; long end; String area; public long getStart() { return start; } public void setStart(long start) { this.start = start; } public long getEnd() { return end; } public void setEnd(long end) { this.end = end; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } public Ipdata(String str) { super(); parse(str); } @Override public String toString() { return start + ", " + end + ", " + area; } private void parse(String str){ String[] tmp = str.split(","); if (3 == tmp.length){ start = Long.parseLong(tmp[0]); end = Long.parseLong(tmp[1]); area = tmp[2]; } } } private final List<String> iplist = new ArrayList<String>(); private Ipdata lastipdata; long sum; public void read(String str) { sum++; Ipdata ipdata = new Ipdata(str); if (lastipdata != null ){ if(ipdata.area != null && ipdata.area.equals(lastipdata.area)){ if (1 == (ipdata.start - lastipdata.end)) { lastipdata.setEnd(ipdata.end); } } else{ iplist.add(lastipdata.toString()); lastipdata = null; } } else lastipdata = ipdata; } private void run(){ String dir = System.getProperty("user.dir"); String path = dir + "/resources/iptables.txt"; String outpathpath = dir + "/resources/iptablesnew.txt"; String path1 = "src/main/java/com.chexun.project.IpMerge/resources/iptables.txt"; Fileinfo fileinfo = new Fileinfo(this); fileinfo.Read(path); fileinfo.Write(outpathpath, false, iplist); fileinfo =null; System.gc(); } public static void main(String[] args) { IpMerge ipmerge = new IpMerge(); ipmerge.run(); } }
public interface FileReadCallback { void read(String Str); }