Files
minoaClientWindows_gradle/src/main/java/cn/minoa/view/mine/MyCloudFileController.java
T

877 lines
30 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package cn.minoa.view.mine;
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
/*
* 数据格式说明:
* f 普通文件
* o 其它文件
* d 文件夹目录
* .前端一个listview表项是一个pane,其id是"路径+纯文件名+@文件类型"
*/
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import cn.minoa.MainApp;
import cn.minoa.dataRequestInterface.OrderInfo;
import cn.minoa.dataRequestInterface.ResponseData;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class MyCloudFileController {
private MainApp mainApp;
@SuppressWarnings("unused")
private Stage dialogStage;
// 当前所在路径
private String currentPath;
// 当前路径下的文件列表[path+file+@type]
private List<String> filePathnameList;
@FXML
private Text pathText;
@FXML
private ListView<Pane> fileList;
@FXML
private Button deleteSelectedButton;
@FXML
private Button downloadTheFileButton;
// 构造函数
public MyCloudFileController() {
// TODO Auto-generated constructor stub
currentPath = "/";
filePathnameList = new LinkedList<String>();
}
@FXML
private void initialize() {
// 在fxml被载入时候被自动调用
// 默认删除按钮不可用
deleteSelectedButton.setDisable(true);
downloadTheFileButton.setDisable(true);
// 监听选择的改变
fileList.getSelectionModel().selectedItemProperty()
.addListener((observable, oldValue, newValue) -> showLowerLevel(newValue.getId()));
}
/*
* @param mainApp
*/
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
// 发送命令请求主目录下的文件夹列表,赋值给filePathnameList
lsFolder(currentPath);
// 更新显示到前端
pathText.setText("当前文件路径:/");
for (int i = 0; i < filePathnameList.size(); i++) {
fileList.getItems().add(new FileListItem(filePathnameList.get(i)).getPaneItem());
}
}
/*
* @param mainApp
*/
public void setMainApp(MainApp mainApp, String iniCurrentPath) {
this.mainApp = mainApp;
// 发送命令请求主目录下的文件夹列表,赋值给filePathnameList
this.currentPath = iniCurrentPath;
lsFolder(currentPath);
// 更新显示到前端
pathText.setText("当前文件路径:" + currentPath);
for (int i = 0; i < filePathnameList.size(); i++) {
fileList.getItems().add(new FileListItem(filePathnameList.get(i)).getPaneItem());
}
}
// 点击事件触发:展示下一级目录
private void showLowerLevel(String paneId) {
// 判断是否是文件夹,是,则进入下一个界面
if (checkFolder(paneId)) {
// 修改按钮属性
deleteSelectedButton.setDisable(true);
downloadTheFileButton.setDisable(true);
// 修改当前路径
currentPath = getFolderName(paneId);
// 根据当前路径,重新加载整个界面,来刷新listview
try {
mainApp.reloadCloudFileOverview(currentPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (checkFile(paneId)) {
// 修改按钮属性
deleteSelectedButton.setDisable(false);
downloadTheFileButton.setDisable(false);
}
}
// 返回上一级按钮
@FXML
private void returnToUpperLevel() {
// 显示上一级目录信息
if (!currentPath.equals("/")) {
// 获取上一级路径
currentPath = getUpperLevelPath(currentPath);
pathText.setText("当前文件路径:" + currentPath);
// 根据当前路径,重新加载整个界面,来刷新listview
try {
mainApp.reloadCloudFileOverview(currentPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("无上一级目录");
alert.setHeaderText("无法返回上一级");
alert.setContentText("您已经到达文件根目录," + "无法返回上一级目录了哦~");
alert.showAndWait();
}
}
// 上传文件到当前文件路径
@FXML
private void uploadFileToCurrentPath() {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("选择上传文件");
Stage selectFileStage = new Stage();
File file = fileChooser.showOpenDialog(selectFileStage);
if (file != null) {
// 文件不为空,且不是文件夹
if (file.isFile()) {
//判断文件长度是否为0
System.out.println("file length: "+file.length());
if(file.length()==0){
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.WARNING);
alert.setTitle("空文件错误");
alert.setHeaderText("您选择的是一个空文件");
alert.setContentText("您选择的是一个空文件,请重新选择。");
alert.showAndWait();
return ;
}
System.out.println("开始文件上传... :" + file.getAbsolutePath());
// 版1【默认根目录】:
// sendFileToServer(file);
// 版2【无进度条】:
// Integer r=mainApp.uploadFileToServerPath(file, currentPath + "/");
// 版3【有进度条】:
mainApp.uploadFileToServerPathWithProgressBar(file, currentPath + "/");
// 判断是否手动取消了上传,是的话就不进行下面的判断
if(mainApp.isCancelFileTransferFlag){
return;
}
// 上传文件之后,通过获取上传到服务器的文件大小,与本地文件大小对比
// 判断是否传输成功
String serverPathname;
if(currentPath.equals("/")){
serverPathname=currentPath+file.getName();
}else{
serverPathname=currentPath+"/"+file.getName();
}
Integer fileServerLength=mainApp.getServerFileByteLength(serverPathname);
System.out.println("fileServerLength: "+fileServerLength);
if(fileServerLength<0){
//文件未成功创建
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.WARNING);
alert.setTitle("文件上传失败");
alert.setHeaderText("文件上传失败");
alert.setContentText("由于未知原因,你的文件上传失败。");
alert.showAndWait();
}else if(fileServerLength== file.length()){
//文件全部成功上传
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("文件上传成功");
alert.setHeaderText("文件上传成功");
alert.setContentText("你的文件已经成功上传至服务器。");
alert.showAndWait();
}else{
//文件部分数据未成功写入
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.WARNING);
alert.setTitle("文件上传失败");
alert.setHeaderText("文件上传失败");
alert.setContentText("由于未知原因,你的文件数据未全部上传成功。");
alert.showAndWait();
}
// 根据当前路径,重新加载整个界面,来刷新listview
try {
mainApp.reloadCloudFileOverview(currentPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.WARNING);
alert.setTitle("文件类型错误");
alert.setHeaderText("你的文件类型错误");
alert.setContentText("请确保你选中的是一个文件而非文件夹。");
alert.showAndWait();
}
}
}
// 在当前文件目录下新建文件夹
@FXML
private void mkdirOnCurrentPath() {
// 弹窗,请求输入文件夹名称
mainApp.showNewFolderDialog();
}
// 刷新当前文件列表
@FXML
private void reloadOnCurrentPath() {
try {
mainApp.reloadCloudFileOverview(currentPath);
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("刷新成功");
alert.setHeaderText("已成功刷新文件列表");
alert.setContentText("已成功刷新文件列表,当前是最新列表");
alert.showAndWait();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.WARNING);
alert.setTitle("刷新失败");
alert.setHeaderText("刷新出现错误");
alert.setContentText("由于未知原因,您的刷新出现错误。");
alert.showAndWait();
}
}
public void makeDir(String foldername) {
foldername = currentPath + "/" + foldername;
// 请求数据
OrderInfo orderInfo = new OrderInfo();
ResponseData responseData = new ResponseData();
Long seqLong = mainApp.getNewDataReqId();
orderInfo.setSeq(seqLong);
orderInfo.setJsonString(getFileActionJson("mkdir", foldername));
System.out.println("getFileActionJson: " + getFileActionJson("mkdir", foldername));
mainApp.minoaDataAPI.executeOrder("/fileAction", orderInfo);
responseData = mainApp.minoaDataAPI.dataCacheQueue.getResponseDataBySeq(seqLong);
JSONObject jsonObject = responseData.praseRequestData();
responseData.printSelf();
// 解析数据
Integer codeInteger = null;
try {
codeInteger = jsonObject.getInt("code");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (codeInteger == 200) {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("新建成功");
alert.setHeaderText("新建文件夹成功");
alert.setContentText("已在当前目录下新建文件夹。");
alert.showAndWait();
// 根据当前路径,重新加载整个界面,来刷新listview
try {
mainApp.reloadCloudFileOverview(currentPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.WARNING);
alert.setTitle("新建失败");
alert.setHeaderText("新建文件夹失败");
alert.setContentText("由于未知原因,您在当前目录下不能新建文件夹。");
alert.showAndWait();
}
}
// 删除选中项按钮=>只支持删除普通文件
@FXML
private void deleteSelectedItem() {
System.out.println("发送了删除请求到服务器...");
// 获取选中的文件
Pane pane = fileList.getSelectionModel().getSelectedItem();
String pathfilename = getPathFileName(pane.getId());
if (checkFile(pane.getId())) {
// 请求数据
OrderInfo orderInfo = new OrderInfo();
ResponseData responseData = new ResponseData();
Long seqLong = mainApp.getNewDataReqId();
orderInfo.setSeq(seqLong);
orderInfo.setJsonString(getFileActionJson("rm", pathfilename));
System.out.println("getFileActionJson: " + getFileActionJson("rm", pathfilename));
mainApp.minoaDataAPI.executeOrder("/fileAction", orderInfo);
responseData = mainApp.minoaDataAPI.dataCacheQueue.getResponseDataBySeq(seqLong);
JSONObject jsonObject = responseData.praseRequestData();
responseData.printSelf();
// 解析数据
Integer codeInteger = null;
try {
codeInteger = jsonObject.getInt("code");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (codeInteger == 200) {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("删除成功");
alert.setHeaderText("删除文件成功");
alert.setContentText("已从云端删除您选中的文件。");
alert.showAndWait();
// 根据当前路径,重新加载整个界面,来刷新listview
try {
mainApp.reloadCloudFileOverview(currentPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.WARNING);
alert.setTitle("删除失败");
alert.setHeaderText("删除文件失败");
alert.setContentText("由于未知原因,您选中的文件不能被删除");
alert.showAndWait();
}
}
}
// 下载选中项按钮,下载文件到缺省本地目录[E盘根目录]
// @FXML
// private void downloadSelectedItem() {
// Pane pane=fileList.getSelectionModel().getSelectedItem();
// String pathfilename=getPathFileName(pane.getId());
// System.out.println("开始下载... :"+pathfilename);
// int flag=mainApp.downloadFileByPathfilename(pathfilename);
// if(flag==0) {
//// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
// Alert alert = new Alert(AlertType.INFORMATION);
// alert.setTitle("下载成功");
// alert.setHeaderText("下载文件成功");
// alert.setContentText("您请求的文件数据已经被全部下载到本地,"
// + "如有发现打开异常或数据内容并非所求,说明出现了服务器数据请求问题。"
// + "您的文件默认保存位置为:"+mainApp.fileLocalPath);
// alert.showAndWait();
// }else {
//// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
// Alert alert = new Alert(AlertType.ERROR);
// alert.setTitle("下载失败");
// alert.setHeaderText("下载文件失败");
// alert.setContentText("本地文件数据写入失败,请检查是否有权限访问默认存储位置。"
// + "您的文件默认保存位置为:"+mainApp.fileLocalPath);
// alert.showAndWait();
// }
// }
// 下载选中项按钮
@FXML
private void downloadSelectedItem() {
// 选择要下载到的文件夹
String localDirString = mainApp.fileLocalPath;
DirectoryChooser directoryChooser = new DirectoryChooser();
directoryChooser.setTitle("选择要下载到的本地文件夹");
Stage selectFileStage = new Stage();
File file = directoryChooser.showDialog(selectFileStage);
if (file != null) {
// 文件不为空,且是一个文件夹
if (file.isDirectory()) {
localDirString = file.getPath() + "\\";
System.out.println("选中的本地保存文件夹为:" + localDirString);
} else {
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.WARNING);
alert.setTitle("选中类型错误");
alert.setHeaderText("你的选中类型错误");
alert.setContentText("请确保你选中的是一个文件夹而不是一个文件。");
alert.showAndWait();
return;
}
}else{
return ;
}
Pane pane = fileList.getSelectionModel().getSelectedItem();
String pathfilename = getPathFileName(pane.getId());
System.out.println("开始下载... :" + pathfilename);
mainApp.downloadFileByPathfilenameWithProgressBar(pathfilename,localDirString);
// 判断是否手动取消了下载,是的话就不进行下面的判断
if(mainApp.isCancelFileTransferFlag){
return;
}
// 下载文件之后,通过获取服务器的文件大小,与下载到本地的文件大小对比
// 判断是否传输成功
Integer fileServerLength=mainApp.getServerFileByteLength(pathfilename);
System.out.println("fileServerLength: "+fileServerLength);
String localfilename=localDirString+getPureFileNameFromLinux(pathfilename);
File localfile=new File(localfilename);
if(!localfile.exists()){
// 本地文件未被成功创建
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("下载失败");
alert.setHeaderText("下载文件失败");
alert.setContentText("本地文件未被成功创建,请检查是否有权限访问你选择的文件存储位置。" + "您的指定的文件保存位置为:" +localDirString);
alert.showAndWait();
}else if(localfile.length()==fileServerLength){
// 本地文件成功创建且字节长度与服务器一致
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle("下载成功");
alert.setHeaderText("下载文件成功");
alert.setContentText("您请求的文件数据已经被全部下载到本地," + "您的文件保存位置为:"
+ localDirString);
alert.showAndWait();
}else{
// 本地文件成功创建但字节长度与服务器不一致
// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("下载失败");
alert.setHeaderText("下载文件失败");
alert.setContentText("文件数据未能全部写入本地。" + "您的文件保存位置为:" +localDirString);
alert.showAndWait();
}
// int flag = mainApp.downloadFileByPathfilename(pathfilename,localDirString);
// if (flag == 0) {
//// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
// Alert alert = new Alert(AlertType.INFORMATION);
// alert.setTitle("下载成功");
// alert.setHeaderText("下载文件成功");
// alert.setContentText("您请求的文件数据已经被全部下载到本地," + "如有发现打开异常或数据内容并非所求,说明出现了服务器数据请求问题。" + "您的文件保存位置为:"
// + localDirString);
// alert.showAndWait();
// } else {
//// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
// Alert alert = new Alert(AlertType.ERROR);
// alert.setTitle("下载失败");
// alert.setHeaderText("下载文件失败");
// alert.setContentText("本地文件数据写入失败,请检查是否有权限访问文件存储位置。" + "您的文件保存位置为:" +localDirString);
// alert.showAndWait();
// }
}
// 根据包含路径的文件名获取纯文件名[linux下]
public String getPureFileNameFromLinux(String pathfilename) {
// 标记最后一个/的下标
int indexLeft = -1;
for (int i = 0; i < pathfilename.length(); i++) {
if (pathfilename.charAt(i) == '/') {
indexLeft = i;
}
}
if (indexLeft == -1) {
System.out.println("pure name[linux]: " + pathfilename);
return pathfilename;
} else {
System.out.println("pure name[linux]: " + pathfilename.substring(indexLeft + 1, pathfilename.length()));
return pathfilename.substring(indexLeft + 1, pathfilename.length());
}
}
// 根据当前目录字符串获取上一层目录
private String getUpperLevelPath(String path) {
String upperPathString = "/";
// 标记最后一个/的下标
int index = 0;
for (int i = 0; i < path.length(); i++) {
if (path.charAt(i) == '/') {
index = i;
}
}
if (index != 0) {
upperPathString = path.substring(0, index);
}
return upperPathString;
}
// 文件操作命令
private String getFileActionJson(String cmd, String filename) {
JSONObject jsonObject = new JSONObject();
String commandString = "/fileAction";
String usernameString = mainApp.loginer.getUserName();
String uuidString = mainApp.loginer.getUuid();
String cmdString = cmd;
String filenameString = filename;
try {
jsonObject.put("command", commandString);
jsonObject.put("username", usernameString);
jsonObject.put("uuid", uuidString);
jsonObject.put("fileCmd", cmdString);
jsonObject.put("filename", filenameString);
} catch (Exception e) {
// TODO: handle exception
System.out.println("exception: " + e.getMessage());
}
return jsonObject.toString();
}
// 列出某目录下的所有文件
private boolean lsFolder(String foldername) {
System.out.println("foldername: " + foldername);
// 请求数据
OrderInfo orderInfo = new OrderInfo();
ResponseData responseData = new ResponseData();
Long seqLong = mainApp.getNewDataReqId();
orderInfo.setSeq(seqLong);
orderInfo.setJsonString(getFileActionJson("ls", foldername));
System.out.println("getFileActionJson: " + getFileActionJson("ls", foldername));
mainApp.minoaDataAPI.executeOrder("/fileAction", orderInfo);
responseData = mainApp.minoaDataAPI.dataCacheQueue.getResponseDataBySeq(seqLong);
JSONObject jsonObject = responseData.praseRequestData();
responseData.printSelf();
// 解析数据
Integer codeInteger = null;
try {
codeInteger = jsonObject.getInt("code");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (codeInteger == 201) {
String dataString;
try {
dataString = jsonObject.getString("data");
if ((dataString.equals("")) || (dataString.equals("null"))) {
filePathnameList.clear();
return true;
}
JSONArray dataJsonArray = new JSONArray(dataString);
String fileCacheString;
JSONObject fileCacheJsonObject;
// 遍历每个文件信息
for (int i = 0; i < dataJsonArray.length(); i++) {
fileCacheString = dataJsonArray.getString(i);
fileCacheJsonObject = new JSONObject(fileCacheString);
String filename = fileCacheJsonObject.getString("filename");
String type = fileCacheJsonObject.getString("type");
if (foldername.charAt(foldername.length() - 1) == '/') {
filePathnameList.add(foldername + filename + "@" + type);
} else {
filePathnameList.add(foldername + '/' + filename + "@" + type);
}
}
return true;
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
return false;
}
// 获取上传文件的json格式
private String getUploadFile(String filename, Integer offset) {
JSONObject jsonObject = new JSONObject();
String commandString = "/uploadFile";
String usernameString = mainApp.loginer.getUserName();
String uuidString = mainApp.loginer.getUuid();
String filenameString = filename;
Integer offsetInteger = offset;
try {
jsonObject.put("command", commandString);
jsonObject.put("username", usernameString);
jsonObject.put("uuid", uuidString);
jsonObject.put("filename", filenameString);
jsonObject.put("offset", offsetInteger);
} catch (Exception e) {
// TODO: handle exception
System.out.println("exception: " + e.getMessage());
}
return jsonObject.toString();
}
// //上传文件操作=>此函数只支持上传指定文件到用户根目录
// public void sendFileToServer(File file) {
// // 获取要上传文件的文件长度,计算上传次数
// long filelen = file.length();
// int cycle = (int) filelen / mainApp.sliceSize;
// System.out.println("file-len: " + filelen);
// System.out.println("cycle: " + cycle);
// // 发送上传命令给上传接口,接口自行取本地数据
// int flagSuccess = 0; // 记录收到200回复的次数
// for (int i = 0; i <= cycle; i++) {
// OrderInfo orderInfo = new OrderInfo();
// ResponseData responseData = new ResponseData();
// Long seqLong = mainApp.getNewDataReqId();
// orderInfo.setSeq(seqLong);
// // 此时传入的文件路径是windows下的绝对路径
// orderInfo.setJsonString(getUploadFile(file.getAbsolutePath(), i * mainApp.sliceSize));
//
// mainApp.minoaDataAPI.executeOrder("/uploadFile", orderInfo);
// responseData = mainApp.minoaDataAPI.dataCacheQueue.getResponseDataBySeq(seqLong);
//// System.out.println("上传文件的数据回执(200表示成功)"+responseData.getResponseJsonDataString());
// JSONObject jsonObject = responseData.praseRequestData();
// responseData.printSelf();
// // 解析数据
// Integer codeInteger = null;
// try {
// codeInteger = jsonObject.getInt("code");
// } catch (JSONException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// if (codeInteger == 200) {
// flagSuccess++;
// }
// }
// // 每个分片都上传成功
// if (flagSuccess == (cycle + 1)) {
//// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
// Alert alert = new Alert(AlertType.INFORMATION);
// alert.setTitle("上传成功");
// alert.setHeaderText("上传文件成功");
// alert.setContentText("您的文件已上传。");
// alert.showAndWait();
// // 根据当前路径,重新加载整个界面,来刷新listview
// try {
// mainApp.reloadCloudFileOverview(currentPath);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// } else {
//// 弹窗参考:https://code.makery.ch/blog/javafx-dialogs-official/
// Alert alert = new Alert(AlertType.WARNING);
// alert.setTitle("上传失败");
// alert.setHeaderText("上传文件失败");
// alert.setContentText("由于未知原因,您的文件上传失败,非常抱歉。");
// alert.showAndWait();
// }
// }
// 从paneId中获取文件所在路径
public String getPathFromPaneId(String paneId) {
// 标记最后一个/的下标
int indexLeft = -1;
// 标记最后一个@的下标
int indexRight = -1;
for (int i = 0; i < paneId.length(); i++) {
if (paneId.charAt(i) == '@') {
indexRight = i;
} else if (paneId.charAt(i) == '/') {
indexLeft = i;
}
}
if ((indexLeft == -1) || (indexRight == -1)) {
System.out.println("prase paneId error: " + paneId);
return "";
}
return paneId.substring(0, indexLeft);
}
// 从paneId中获取纯文件名
public String getPureFilenameFromPaneId(String paneId) {
// 标记最后一个/的下标
int indexLeft = -1;
// 标记最后一个@的下标
int indexRight = -1;
for (int i = 0; i < paneId.length(); i++) {
if (paneId.charAt(i) == '@') {
indexRight = i;
} else if (paneId.charAt(i) == '/') {
indexLeft = i;
}
}
if ((indexLeft == -1) || (indexRight == -1)) {
System.out.println("prase paneId error: " + paneId);
return "";
}
return paneId.substring(indexLeft + 1, indexRight);
}
// 从paneId中获取文件类型
private String getFileTypeFromPaneId(String paneId) {
return paneId.substring(paneId.length() - 1, paneId.length());
}
// 从paneId中获取文件夹路径[path+name]
private String getFolderName(String paneId) {
return paneId.substring(0, paneId.length() - 2);
}
// 从paneId中获取文件路径[path+name]
private String getPathFileName(String paneId) {
return paneId.substring(0, paneId.length() - 2);
}
// 判断是否是文件夹
private boolean checkFolder(String paneId) {
if (getFileTypeFromPaneId(paneId).equals("d")) {
return true;
} else if (paneId.equals("/")) {
return true;
}
return false;
}
// 判断是否是文件
private boolean checkFile(String paneId) {
if (getFileTypeFromPaneId(paneId).equals("f")) {
return true;
}
return false;
}
}
class FileListItem {
// 外部pane
private Pane pane;
private Integer paneWidth;
private Integer paneHeight;
// 头像
private Button head;
private Integer headLength;
// 文本区域
// public TextArea text;
private Text text;
// private Integer textWidth;
// private Integer textHeight;
// 每个Pane代映射了一个文件[路径+文件名+@文件类型]
String pathfilename;
// 组件位置属性
private Integer headXInteger;
private Integer headYInteger;
private Integer textXInteger;
private Integer textYInteger;
// 设置联系人头像
private void setHeadPortrait(Button button, String filetype) {
button.setStyle(
String.format("-fx-background-image: url('file:resources/images/myFileIcon/%s.png')", filetype));
}
// 构造函数
public FileListItem(String pathfiletypename) {
// 映射数据
this.pathfilename = pathfiletypename;
// 大小配置
paneWidth = 200;
paneHeight = 50;
headLength = 35;
// textWidth = 150;
// textHeight = 25;
// 位置配置
headXInteger = 10;
headYInteger = 10;
textXInteger = 70;
textYInteger = 28;
pane = new Pane();
head = new Button();
text = new Text();
// 最外面的pane的大小
pane.setPrefSize(paneWidth, paneHeight);
// 设置头像和pane的CSS的样式标识
head.getStyleClass().add("head");
pane.getStyleClass().add("pane");
// 设置消息头像和消息文本属性
head.setPrefSize(headLength, headLength);
// text.setPrefSize(textWidth, textHeight);
// text.setWrapText(true);
// text.setEditable(false);
}
public FileListItem(String pathfilename, String filetype) {
// 映射数据
this.pathfilename = pathfilename + "@" + filetype;
// 大小配置
paneWidth = 200;
paneHeight = 50;
headLength = 35;
// textWidth = 150;
// textHeight = 25;
// 位置配置
headXInteger = 10;
headYInteger = 10;
textXInteger = 70;
textYInteger = 28;
pane = new Pane();
head = new Button();
text = new Text();
// 最外面的pane的大小
pane.setPrefSize(paneWidth, paneHeight);
// 设置头像和pane的CSS的样式标识
head.getStyleClass().add("head");
pane.getStyleClass().add("pane");
// 设置消息头像和消息文本属性
head.setPrefSize(headLength, headLength);
// text.setPrefSize(textWidth, textHeight);
// text.setWrapText(true);
// text.setEditable(false);
}
// 根据person获取pane
public Pane getPaneItem() {
String name = this.pathfilename;
// 头像位置
head.setLayoutY(headYInteger);
head.setLayoutX(headXInteger);
// text位置
text.setLayoutX(textXInteger);
text.setLayoutY(textYInteger);
// 头像和气泡文本内容
text.setText(getPureFilenameFromPaneId(name));
// text.setText(name);
setHeadPortrait(head, getFileTypeFromPaneId(name));
pane.getChildren().add(head);
pane.getChildren().add(text);
// 设置pane的id
pane.setId(name);
return pane;
}
// 根据包含路径的文件名获取纯文件名
private String getPureFilenameFromPaneId(String paneId) {
// 标记最后一个/的下标
int indexLeft = -1;
// 标记最后一个@的下标
int indexRight = -1;
for (int i = 0; i < paneId.length(); i++) {
if (paneId.charAt(i) == '@') {
indexRight = i;
} else if (paneId.charAt(i) == '/') {
indexLeft = i;
}
}
if ((indexLeft == -1) || (indexRight == -1)) {
System.out.println("prase paneId error: " + paneId);
return "";
}
return paneId.substring(indexLeft + 1, indexRight);
}
// 从paneId中获取文件类型
private String getFileTypeFromPaneId(String paneId) {
return paneId.substring(paneId.length() - 1, paneId.length());
}
}