刚学java时写的,记得查了不少博客才搞定。
虽然不是啥好东西,不过还是记录一下。
1.菜单
package main;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc=new Scanner(System.in);
File file=new File("result");
if(!file.exists())
file.mkdir();
while(true) {
Menu();
if (sc.hasNextInt()) {
int flag = sc.nextInt();
switch (flag) {
case 1:
Deal.analysis();
break;
case 2:
LookUp.lookup();
break;
case 0:
System.out.println("退出程序!");
return;
default:
System.out.println("请输入合法字符!");
}
}
else{
System.out.println("请输入合法字符!");
break;
}
}
}
public static void Menu()
{
System.out.println("-------MENU-----");
System.out.println("1.分析目录中的源程序文件");
System.out.println("2.查看分析结果");
System.out.println("0.退出程序");
System.out.println("----------------");
System.out.print("请选择:");
}
}
2.分析
package main;
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
public class Deal {
static int blank1=0;
static Scanner sc=new Scanner(System.in);
static String path=null;
static File file=null;
static File file1=new File("result");
static PrintWriter writer;
static int allLine=0,allBlankLine=0,allBytes=0,allFiles=0;
static StringAlign align1=new StringAlign();
public Deal() throws IOException {
}
public static void analysis() throws IOException {
while (true){
System.out.println("请输入目录:");
path=sc.nextLine();
file=new File(path);
if(!file.exists()||!file.isDirectory())
{
System.out.println("["+file+"]不是目录名或者不存在!");
}else
{
break;
}
}
{
try {
writer = new PrintWriter(new BufferedWriter(new FileWriter(file1.getAbsolutePath()+"//"
+file.getName()+".txt")));
} catch (IOException e) {
e.printStackTrace();
}
}
writer.write("["+file.getAbsolutePath()+"] Result:\n");
writer.write("\n");
writer.write("Files detail:\n");
input(file,blank1);
writer.write("Total:\n");
writer.write(" "+align1.padLeft(allFiles+"",6)+align1.padLeft("Java Files",20)+"\n");
writer.write(" "+align1.padLeft(allLine+"",6)+align1.padLeft("lines in files",20)+"\n");
writer.write(" "+align1.padLeft(allBlankLine+"",6)+align1.padLeft("blank ines",20)+"\n");
writer.write(" "+align1.padLeft(allBytes+"",6)+align1.padLeft("bytes",20)+"\n");
writer.close();
}
public static void input(File file,int blank) throws IOException {
File[] files = file.listFiles();
if(files!=null)
{
Arrays.sort(files,((o1, o2) ->
{
if (o1.isDirectory()&&o2.isDirectory())
{
return String.CASE_INSENSITIVE_ORDER.compare(o1.getName(),o2.getName());
}
if(o1.isDirectory())
{
return 1;
}
if(o2.isDirectory())
{
return -1;
}
return String.CASE_INSENSITIVE_ORDER.compare(o1.getName(),o2.getName());
}));
}
if (file.isDirectory()) {
for (int a = 0; a< blank; a++)
writer.write(" ");
writer.write("+"+file.getName()+"\n");
for (int i = 0; i < files.length; i++) {
input(files[i], blank + 4);
}
}
else {
if (file.getName().endsWith(".java")){
allFiles++;
allBytes += file.length();
allBlankLine += countBlanks(file);
allLine += countRows(file);
for (int a = 0; a < blank; a++)
writer.write(" ");
writer.write("-" +align1.padRight(file.getName(),50)+"Total:"+align1.padLeft(countRows(file)+"",5)
+",Blank:"+ align1.padLeft(countBlanks(file)+"",5)+","
+align1.padLeft(file.length()+"",5)+" Bytes\n");
}
}
}
public static int countRows(File file) throws IOException {
int rows = 0;
if (file.isFile()) {
BufferedReader input = new BufferedReader(new FileReader(file));
while (input.readLine() != null) {
rows++;
}
}
return rows;
}
public static int countBlanks(File file) throws IOException {
int blanks = 0;
if (file.isFile()) {
BufferedReader input = new BufferedReader(new FileReader(file));
String line = null;
while ((line = input.readLine()) != null) {
if (line.trim().equals("")) blanks++;
}
}
return blanks;
}
}
3.打印结果
package main;
import java.io.*;
import java.util.Scanner;
public class LookUp {
static File file =new File("result");
static File[] files=file.listFiles();
static BufferedReader reader=null;
public static void lookup() throws IOException {
Menu();
Choose();
}
public static void Menu(){
if(!file.exists()||!file.isDirectory()||files.length==0){
System.out.println("还没有分析结果!");
}
else {
System.out.println("可以查看的结果文件有:");
System.out.println("---------------------------");
for (int i = 1; i <= files.length; i++) {
System.out.println(i+"."+files[i-1].getName());
}
System.out.println("---------------------------");
System.out.print("选择要查看的结果文件(0表示放弃):");
}
}
public static void Choose() throws IOException {
Scanner sc = new Scanner(System.in);
if (sc.hasNextInt()) {
int a = sc.nextInt();
if (a < 0 || a > files.length) {
System.out.println("请输入合法字符!");
} else if (a == 0) {
System.out.println("放弃,返回第一层选项");
} else {
Print(files[a - 1]);
}
}
else {
System.out.println("请输入合法字符!");
}
}
public static void Print(File file2) throws IOException {
if(file2.exists()&&file2.isFile()){
reader=new BufferedReader(new FileReader(file2.getAbsolutePath()));
int data;
while((data = reader.read()) != -1){
System.out.print((char)data);
}
}
}
}
4.忘了哪个博客找到的类,虽然如今看来不是很高深的东西,但一直很遗憾没点赞,现在也找不到了。
空格补全对齐:
package main;
public class StringAlign {
public static String padLeft(String origin, int length) {
while (origin.length() < length) {
origin = " " + origin;
}
return origin;
}
public static String padRight(String origin, int length) {
while (origin.length() < length) {
origin = origin + " ";
}
return origin;
}
}