2023年6月2日18:28:13

master
zhangmeng 2023-06-02 18:28:21 +08:00
parent 9476743c77
commit 5e6dac1670
4 changed files with 156 additions and 98 deletions

View File

@ -1,9 +1,13 @@
package com.zhangmeng.tools.controller; package com.zhangmeng.tools.controller;
import cn.hutool.core.io.resource.ClassPathResource;
import cn.hutool.core.io.resource.Resource;
import com.zhangmeng.tools.components.RecursiveFileList; import com.zhangmeng.tools.components.RecursiveFileList;
import com.zhangmeng.tools.languages.ProcessGO; import com.zhangmeng.tools.languages.ProcessGO;
import com.zhangmeng.tools.languages.ProcessJava; import com.zhangmeng.tools.languages.ProcessJava;
import com.zhangmeng.tools.utils.AlertUtils; import com.zhangmeng.tools.utils.AlertUtils;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.SplitPane; import javafx.scene.control.SplitPane;
@ -22,12 +26,16 @@ import org.fxmisc.richtext.model.StyleSpans;
import org.fxmisc.richtext.model.StyleSpansBuilder; import org.fxmisc.richtext.model.StyleSpansBuilder;
import java.io.File; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.Properties;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -57,8 +65,16 @@ public class FileEditController {
private TabPane tabPane = null; private TabPane tabPane = null;
private static String path = null;
private final ObservableList<String> filePaths_list = FXCollections.observableArrayList();
@FXML @FXML
public void initialize() { public void initialize() {
//读取本地加载记录
Properties s = config_path(false);
recursiveFileList = new RecursiveFileList(null); recursiveFileList = new RecursiveFileList(null);
tabPane = new TabPane(); tabPane = new TabPane();
splitPane.getItems().add(0, recursiveFileList); splitPane.getItems().add(0, recursiveFileList);
@ -68,7 +84,19 @@ public class FileEditController {
} }
@FXML @FXML
public void open_file_dir(ActionEvent event) { public void open_file_menu(){
Stage stage = new Stage();
FileChooser dc = new FileChooser();
dc.setTitle("文件选择");
dc.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("文件类型", "*.java", "*.go","*.txt","*.json"));
File file = dc.showOpenDialog(stage);
if (file != null) {
refresh(file,true);
}
}
@FXML
public void open_file_dir_menu(ActionEvent event) {
open_file_dir(); open_file_dir();
} }
@ -76,6 +104,7 @@ public class FileEditController {
CodeArea codeArea = new CodeArea(); CodeArea codeArea = new CodeArea();
URL resource = this.getClass().getClassLoader().getResource("css/code.css"); URL resource = this.getClass().getClassLoader().getResource("css/code.css");
codeArea.getStylesheets().add(resource.toExternalForm()); codeArea.getStylesheets().add(resource.toExternalForm());
codeArea.setParagraphGraphicFactory(LineNumberFactory.get(codeArea));
byte[] bytes = new byte[0]; byte[] bytes = new byte[0];
try { try {
bytes = Files.readAllBytes(file.toPath()); bytes = Files.readAllBytes(file.toPath());
@ -83,12 +112,10 @@ public class FileEditController {
e.printStackTrace(); e.printStackTrace();
} }
String file_content = new String(bytes, StandardCharsets.UTF_8); String file_content = new String(bytes, StandardCharsets.UTF_8);
codeArea.clear();
codeArea.replaceText(0, 0, file_content);
codeArea.textProperty().addListener((obs, oldText, newText) -> { codeArea.textProperty().addListener((obs, oldText, newText) -> {
codeArea.setStyleSpans(0, computeHighlighting(newText, type)); codeArea.setStyleSpans(0, computeHighlighting(newText, type));
}); });
codeArea.setStyleSpans(0, computeHighlighting(file_content, type)); codeArea.replaceText(0, 0, file_content);
Tab tab = new Tab(file.getName()); Tab tab = new Tab(file.getName());
tab.setContent(new VirtualizedScrollPane<>(codeArea)); tab.setContent(new VirtualizedScrollPane<>(codeArea));
tabPane.getTabs().add(tab); tabPane.getTabs().add(tab);
@ -103,11 +130,31 @@ public class FileEditController {
File file = dc.showDialog(stage); File file = dc.showDialog(stage);
if (file != null) { if (file != null) {
if (file.isDirectory()) { if (file.isDirectory()) {
refresh(file,false);
}
}
}
public void refresh(File file,boolean is_open_file){
splitPane.getItems().clear(); splitPane.getItems().clear();
recursiveFileList = new RecursiveFileList(file); recursiveFileList = new RecursiveFileList(file);
recursiveFileList.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { recursiveFileList.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
if (newValue.getValue().isFile()) { if (newValue.getValue().isFile()) {
String extension = FilenameUtils.getExtension(newValue.getValue().getName()); file_checked(file);
}
});
splitPane.getItems().add(0, recursiveFileList);
splitPane.getItems().add(1, tabPane);
splitPane.setDividerPosition(0, 0.20);
splitPane.setDividerPosition(1, 0.80);
if (is_open_file){
file_checked(file);
}
}
public void file_checked(File file){
String extension = FilenameUtils.getExtension(file.getName());
boolean flag = true; boolean flag = true;
if (extension.equals("mp4")) { if (extension.equals("mp4")) {
@ -137,46 +184,17 @@ public class FileEditController {
if (extension.equals("exe")) { if (extension.equals("exe")) {
flag = false; flag = false;
} }
//
// if (extension.equals("json")){
// flag = true;
// }
//
// if (extension.equals("go")){
// flag = true;
// }
//
// if (extension.equals("js")){
// flag = true;
// }
//
// if (extension.equals("css")){
// flag = true;
// }
//
// if (extension.equals(".xml")){
// flag = true;
// }
if (flag) { if (flag) {
Type type = Type.JAVA; Type type = Type.JAVA;
if (extension.equals("go")) { if (extension.equals("go")) {
type = Type.GO; type = Type.GO;
} }
open_file(newValue.getValue(), type); open_file(file, type);
} else { } else {
AlertUtils.alert_warning("该文件不支持!"); AlertUtils.alert_warning("该文件不支持!");
} }
} }
});
splitPane.getItems().add(0, recursiveFileList);
splitPane.getItems().add(1, tabPane);
splitPane.setDividerPosition(0, 0.20);
splitPane.setDividerPosition(1, 0.80);
}
}
}
public static StyleSpans<Collection<String>> computeHighlighting(String text, Type type) { public static StyleSpans<Collection<String>> computeHighlighting(String text, Type type) {
Matcher matcher = ProcessJava.PATTERN.matcher(text); Matcher matcher = ProcessJava.PATTERN.matcher(text);
@ -208,4 +226,63 @@ public class FileEditController {
return spansBuilder.create(); return spansBuilder.create();
} }
public static String config_path() {
Resource resource = new ClassPathResource("config/fileEdit.properties");
InputStream inputStream = resource.getStream();
Properties properties = new Properties();
try {
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
return properties.getProperty("open.file.path");
}
public static Properties config_path(boolean openFile) {
Resource resource = new ClassPathResource("config/fileEdit.properties");
InputStream inputStream = resource.getStream();
Properties properties = new Properties();
try {
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
public void setPath(String path, List<String> filePaths){
Resource resource = new ClassPathResource("config/fileEdit.properties");
InputStream inputStream = resource.getStream();
FileOutputStream fileOutputStream = null;
Properties properties = new Properties();
try {
properties.load(inputStream);
String value = properties.getProperty("open.file.path");
log.info("path:{}",value);
properties.setProperty("open.file.path",path);
int i = 0;
if (filePaths.size()>0){
for (String filePath : filePaths) {
properties.setProperty("open.file.list[" + i + "]",filePath);
i++;
}
}
log.info("properties:{}",properties);
String out_path = Thread.currentThread().getContextClassLoader().getResource("").getPath() + "config/fileEdit.properties";
fileOutputStream = new FileOutputStream(out_path);
properties.store(fileOutputStream,"保存");
} catch (IOException e) {
log.info("选择路径出错!");
}finally {
try {
inputStream.close();
if (fileOutputStream != null){
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
} }

View File

@ -0,0 +1,2 @@
open.file.path=
open.file.list[0] =

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import com.zhangmeng.tools.music.musicPlayer.MusicPlayer?>
<?import java.util.ArrayList?>
<ArrayList>
<MusicPlayer file_path="a" file_lyric="18" singer="1"/>
<MusicPlayer file_path="b" file_lyric="18" singer="1"/>
<MusicPlayer file_path="b" file_lyric="18" singer="1"/>
<MusicPlayer file_path="d" file_lyric="18" singer="1"/>
<MusicPlayer file_path="e" file_lyric="18" singer="1"/>
<MusicPlayer file_path="f" file_lyric="18" singer="1"/>
<MusicPlayer file_path="g" file_lyric="18" singer="1"/>
<MusicPlayer file_path="h" file_lyric="18" singer="1"/>
<MusicPlayer file_path="i" file_lyric="18" singer="1"/>
<MusicPlayer file_path="j" file_lyric="18" singer="1"/>
<MusicPlayer file_path="k" file_lyric="18" singer="1"/>
<MusicPlayer file_path="l" file_lyric="18" singer="1"/>
<MusicPlayer file_path="m" file_lyric="18" singer="1"/>
<MusicPlayer file_path="n" file_lyric="18" singer="1"/>
</ArrayList>

View File

@ -14,7 +14,8 @@
<menus> <menus>
<Menu mnemonicParsing="false" text="文件"> <Menu mnemonicParsing="false" text="文件">
<items> <items>
<MenuItem mnemonicParsing="false" text="打开文件夹" onAction="#open_file_dir" /> <MenuItem mnemonicParsing="false" text="打开文件" onAction="#open_file_menu" />
<MenuItem mnemonicParsing="false" text="打开文件夹" onAction="#open_file_dir_menu" />
<MenuItem mnemonicParsing="false" text="保存"/> <MenuItem mnemonicParsing="false" text="保存"/>
</items> </items>
</Menu> </Menu>