java综合实验
作者:
做ac梦w
,
2023-01-06 18:46:31
,
所有人可见
,
阅读 228
package com.jf;
import javax.sound.midi.SysexMessage;
import java.awt.*;
import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class directory {
static int sumfiles = 0;
static int sumlines = 0;
static int sumblanks = 0;
static int sumbytes = 0;
public static long getbytes(File file) {
return file.length();
}
public static int getlines(File path) throws IOException {
int res=0;
BufferedReader br=new BufferedReader(new FileReader(path));
String line;
while((line= br.readLine())!=null){
res++;
}
return res;
}
public static int getblanks(File path) throws IOException {
int res=0;
BufferedReader br=new BufferedReader(new FileReader(path));
String line;
while((line= br.readLine())!=null){
if(line.equals("")) res++;
}
return res;
}
public static void write(File path) throws IOException {
Boolean success=new File("result").mkdir();
File temp=new File("result"+"\\"+path.getName()+".txt");
boolean fr=temp.createNewFile();
FileWriter fw=new FileWriter(temp);
fw.write("["+temp.getAbsolutePath()+"]"+" Result:\n\n");
fw.write("File details:\n");
directory.dfs(path,0,fw);
fw.write("Total\n");
fw.write(String.format("%10d",sumfiles)+"\tJava Files\t\n");
fw.write(String.format("%10d",sumlines)+"\tlines in files\t\n");
fw.write(String.format("%10d",sumblanks)+"\tblank lines\t\n");
fw.write(String.format("%10d",sumbytes)+"\tbytes\t\n");
fw.close();
}
static void dfs(File path, int cnt,FileWriter fw) throws IOException {
for(int i=1;i<=cnt*4;i++) {
fw.write(" ");
}
if (isjava(path)) {
fw.write("-"+path.getName());
sumfiles++;
int lines=getlines(path);
sumlines+=lines;
int blanks=getblanks(path);
sumblanks+=blanks;
long bytes=getbytes(path);
sumbytes+=bytes;
fw.write("\tTotal:\t" + String.format("%5d", lines) + ", Blank:\t"
+ String.format("%5d",blanks) + ",\t" + String.format("%5d", bytes)
+ " Bytes"+"\n");
return;
}
File[] files = path.listFiles();
if(files==null) return;
sortpaths(files);
fw.write("+"+path.getName()+"\n");
for (int i = 0; i < files.length; i++) {
dfs(files[i], cnt + 1,fw);
}
}
public static boolean isjava(File file){
String temp=file.toString();
return temp.endsWith(".java");
}
public static void sortpaths(File[] files){
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
if (o1.isFile() && o2.isFile()) {
return o1.getName().compareTo(o2.getName());
} else if (o1.isDirectory() && o2.isDirectory()) {
return o1.getName().compareTo(o2.getName());
} else if (o1.isDirectory() && o2.isFile()) {
return -1;
} else if (o1.isFile() && o2.isDirectory()) {
return 1;
}
return 0;
}
});
}
}
class Menu{
public void showmenu() throws IOException {
System.out.println("-----MENU-----");
System.out.println("1.分析目录中的源程序文件");
System.out.println("2.查看分析结果");
System.out.println("0.退出程序");
System.out.println("--------------");
System.out.println("请选择:");
Scanner sc=new Scanner(System.in);
int op=sc.nextInt();
File path=null;
if (op == 1) {
System.out.println("请输入目录名称");
String dir=sc.next();
path = new File(dir);
if (path.isDirectory()) {
directory.write(path);
} else {
System.out.println("错误:[" + dir + "]" + "不是目录名或不存在");
}
}
else{
File temp=new File("result");
File[] files=temp.listFiles();
if(files!=null){
System.out.println("可以查看的结果文件有:");
System.out.println("----------------");
for(int i=0;i<files.length;i++){
System.out.println(i+1+"."+files[i].getName());
}
System.out.println("----------------");
System.out.println("选择要查看的结果文件(0表示放弃):");
int ch=sc.nextInt();
if(ch==0){
return;
}
printfile(files[ch-1]);
}
else{
System.out.println("还没有分析结果");
}
}
}
public void printfile(File t) throws IOException {
BufferedReader br=new BufferedReader(new FileReader(t));
String line;
while((line=br.readLine())!=null){
System.out.println(line);
}
}
}
public class Main {
public static void main(String[] args) throws IOException {
Menu menu=new Menu();
menu.showmenu();
System.out.println("程序运行结束");
}
}