Linux中用eclipse编写一个类似ubuntu terminal的程序满足以下要求能够支持常用命令:lsls -lls -ldls pathls -l pathls -ld pathcd dirmkdir dirrmdir dirrm -rf filename or dirtouch filenamechmod filename or dircat filenametar -
要实现一个类似Ubuntu终端的程序,你可以使用Java编写一个控制台应用程序。以下是一个示例代码,满足你提供的要求:
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Terminal {
private List<String> commandHistory;
private String currentDirectory;
public Terminal() {
commandHistory = new ArrayList<>();
currentDirectory = System.getProperty("user.dir");
}
public void start() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String input;
while (true) {
System.out.print(currentDirectory + "> ");
input = reader.readLine();
if (input.equals("exit")) {
break;
}
executeCommand(input);
commandHistory.add(input);
}
}
private void executeCommand(String input) throws IOException {
String[] tokens = input.split("\\s+");
String command = tokens[0];
switch (command) {
case "ls":
executeLs(tokens);
break;
case "cd":
executeCd(tokens);
break;
case "mkdir":
executeMkdir(tokens);
break;
case "rmdir":
executeRmdir(tokens);
break;
case "rm":
executeRm(tokens);
break;
case "touch":
executeTouch(tokens);
break;
case "chmod":
executeChmod(tokens);
break;
case "cat":
executeCat(tokens);
break;
case "tar":
executeTar(tokens);
break;
case "history":
executeHistory();
break;
case "pwd":
executePwd();
break;
default:
System.out.println("Unknown command: " + command);
}
}
private void executeLs(String[] tokens) throws IOException {
List<String> files;
if (tokens.length > 1 && tokens[1].equals("-l")) {
files = Arrays.asList(new File(currentDirectory).list());
} else if (tokens.length > 1 && tokens[1].equals("-ld")) {
files = Arrays.asList(new File(currentDirectory).list());
System.out.println(currentDirectory);
} else if (tokens.length > 1) {
files = Arrays.asList(new File(tokens[1]).list());
} else {
files = Arrays.asList(new File(currentDirectory).list());
}
for (String file : files) {
System.out.println(file);
}
}
private void executeCd(String[] tokens) {
if (tokens.length > 1) {
String newDirectory = tokens[1];
if (newDirectory.equals("..")) {
currentDirectory = new File(currentDirectory).getParent();
} else {
currentDirectory = Paths.get(currentDirectory, newDirectory).toString();
}
System.setProperty("user.dir", currentDirectory);
}
}
private void executeMkdir(String[] tokens) throws IOException {
if (tokens.length > 1) {
String newDirectory = tokens[1];
Files.createDirectory(Paths.get(currentDirectory, newDirectory));
}
}
private void executeRmdir(String[] tokens) throws IOException {
if (tokens.length > 1) {
String directoryToDelete = tokens[1];
Files.delete(Paths.get(currentDirectory, directoryToDelete));
}
}
private void executeRm(String[] tokens) throws IOException {
if (tokens.length > 1) {
String fileToDelete = tokens[1];
if (tokens.length > 2 && tokens[2].equals("-rf")) {
Files.walk(Paths.get(currentDirectory, fileToDelete))
.sorted((path1, path2) -> -path1.toString().length())
.map(Path::toFile)
.forEach(File::delete);
} else {
Files.delete(Paths.get(currentDirectory, fileToDelete));
}
}
}
private void executeTouch(String[] tokens) throws IOException {
if (tokens.length > 1) {
String newFile = tokens[1];
Files.createFile(Paths.get(currentDirectory, newFile));
}
}
private void executeChmod(String[] tokens) throws IOException {
if (tokens.length > 1) {
String fileOrDir = tokens[1];
String permission = tokens[2];
File target = new File(currentDirectory, fileOrDir);
target.setReadable(permission.charAt(0) == '1');
target.setWritable(permission.charAt(1) == '1');
target.setExecutable(permission.charAt(2) == '1');
}
}
private void executeCat(String[] tokens) throws IOException {
if (tokens.length > 1) {
String fileToRead = tokens[1];
Files.lines(Paths.get(currentDirectory, fileToRead)).forEach(System.out::println);
}
}
private void executeTar(String[] tokens) throws IOException {
if (tokens.length > 1) {
String option = tokens[1];
String archiveName = tokens[2];
if (option.equals("-czvf")) {
String[] filesToArchive = Arrays.copyOfRange(tokens, 3, tokens.length);
ArchiveUtils.compress(filesToArchive, archiveName);
} else if (option.equals("-xzvf")) {
String destinationPath = tokens[3];
ArchiveUtils.extract(archiveName, destinationPath);
}
}
}
private void executeHistory() {
for (int i = 0; i < commandHistory.size(); i++) {
System.out.println(i + " " + commandHistory.get(i));
}
}
private void executePwd() {
System.out.println(currentDirectory);
}
public static void main(String[] args) throws Exception {
Terminal terminal = new Terminal();
terminal.start();
}
}
此示例是一个简单的命令行解释器,可以处理你提供的常用命令。它使用了Java的标准库和一些文件操作来模拟命令行功能。请注意,此示例可能不包括错误处理和完整的功能,你可以根据需要进行扩展和修改
原文地址: https://www.cveoy.top/t/topic/hSQO 著作权归作者所有。请勿转载和采集!