package gitj.utils; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.List; import git.Repository; public class FileUtils { public static String getRepoPath(File file, Repository repo) { String path = file.getAbsolutePath(); path = path.replace(repo.getFolder().getAbsolutePath(), "").replace("\\", "/"); if (path.startsWith("/")) { path = path.substring(1, path.length()); } return path; } public static File fromRepoPath(String path, Repository repo) { return new File(repo.getFolder(), path); } public static File writeToTempFile(String contents) throws Exception { File file = File.createTempFile("tmp", ".txt"); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))); writer.write(contents); writer.close(); return file; } public static List<String> readFile(File file) throws Exception { List<String> lines = new ArrayList<String>(); BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); String line; while ((line = reader.readLine()) != null) { lines.add(line); } reader.close(); return lines; } /** * https://stackoverflow.com/questions/453018/number-of-lines-in-a-file-in-java * * 6 times faster than BufferedReader.readLine() * @param filename * @return * @throws Exception */ public static int countLines(File file) throws Exception { BufferedInputStream is = new BufferedInputStream(new FileInputStream(file)); byte[] c = new byte[1024]; int count = 0; int readChars = 0; boolean empty = true; while ((readChars = is.read(c)) != -1) { empty = false; for (int i = 0; i < readChars; ++i) { if (c[i] == '\n') { ++count; } } } is.close(); return (count == 0 && !empty) ? 1 : count; } }