基于javafx的模拟磁盘文件系统

            好久没写博客了,今天有空写写,讲讲之前的操作系统课程设计,模拟的磁盘文件管理系统,说到模拟,这里做的是用一个二进制文件来模拟磁盘,里面分磁盘块,这里我简单梳理题目,方便大家理解使用。(源代码下载

课程设计题目要求

总的需求:目录,文件的CRUD,要求树形结构,操作过程要模拟磁盘的存储过程;

1界面需求:

<1>要求有右键菜单

(1)系统的右键菜单:添加文件,添加目录

(2)文件的右键菜单:打开文件,删除文件,查看属性,修改属性(只读,可读写)

(3)目录的右键菜单:删除,打开目录

 

<2>系统要求:

(1)文件和目录的显示与操作和窗口类似。

(2)可以查看磁盘使用状况:磁盘块的使用情况(使用,未使用)

(3)界面友好:添加文件和目录时要有提示信息,

如文件名长度不超过3,不能包含“'$','。' ,'/'”字符

  2后台需求:

<1>用一个文件模拟磁盘,磁盘分128块,每块64字节大小。

<2>用FAT表维护磁盘的储存状况:哪块磁盘块使用了,哪块磁盘块为空。

<3>文件内容的存储和取出要和真实磁盘操作一致,即:设置缓冲区,一次

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
基于 JavaFX 的文件传输可以通过 Socket 实现。以下是一个简单的示例代码: ```java public class FileSender extends Thread { private String ipAddress; private int portNumber; private File fileToSend; private ProgressIndicator progressIndicator; public FileSender(String ipAddress, int portNumber, File fileToSend, ProgressIndicator progressIndicator) { this.ipAddress = ipAddress; this.portNumber = portNumber; this.fileToSend = fileToSend; this.progressIndicator = progressIndicator; } @Override public void run() { try { Socket socket = new Socket(ipAddress, portNumber); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); // send file name and size dos.writeUTF(fileToSend.getName()); dos.writeLong(fileToSend.length()); // send file data FileInputStream fis = new FileInputStream(fileToSend); byte[] buffer = new byte[4096]; int read; long totalSent = 0; while ((read = fis.read(buffer)) != -1) { dos.write(buffer, 0, read); totalSent += read; double progress = (double) totalSent / fileToSend.length(); Platform.runLater(() -> progressIndicator.setProgress(progress)); } fis.close(); dos.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } public class FileReceiver extends Thread { private int portNumber; private File receivedFile; private ProgressIndicator progressIndicator; public FileReceiver(int portNumber, File receivedFile, ProgressIndicator progressIndicator) { this.portNumber = portNumber; this.receivedFile = receivedFile; this.progressIndicator = progressIndicator; } @Override public void run() { try { ServerSocket serverSocket = new ServerSocket(portNumber); Socket socket = serverSocket.accept(); DataInputStream dis = new DataInputStream(socket.getInputStream()); // receive file name and size String fileName = dis.readUTF(); long fileSize = dis.readLong(); // receive file data FileOutputStream fos = new FileOutputStream(receivedFile); byte[] buffer = new byte[4096]; int read; long totalReceived = 0; while ((read = dis.read(buffer)) != -1) { fos.write(buffer, 0, read); totalReceived += read; double progress = (double) totalReceived / fileSize; Platform.runLater(() -> progressIndicator.setProgress(progress)); } fos.close(); dis.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在 JavaFX 应用程序中,您可以通过选择文件和指定接收方的 IP 地址和端口号来触发文件发送和接收。以下是一个示例界面代码: ```java public class FileTransferController { // UI components @FXML private TextField ipAddressTextField; @FXML private TextField portNumberTextField; @FXML private Button selectFileButton; @FXML private Button sendFileButton; @FXML private ProgressIndicator sendProgressIndicator; @FXML private TextField destinationFolderTextField; @FXML private Button receiveFileButton; @FXML private ProgressIndicator receiveProgressIndicator; // variables private File selectedFile; private File receivedFile; public void initialize() { sendProgressIndicator.setProgress(0); receiveProgressIndicator.setProgress(0); } @FXML private void handleSelectFile() { FileChooser fileChooser = new FileChooser(); selectedFile = fileChooser.showOpenDialog(null); } @FXML private void handleSendFile() { if (selectedFile == null) { // handle error return; } String ipAddress = ipAddressTextField.getText(); int portNumber = Integer.parseInt(portNumberTextField.getText()); FileSender fileSender = new FileSender(ipAddress, portNumber, selectedFile, sendProgressIndicator); fileSender.start(); } @FXML private void handleReceiveFile() { if (destinationFolderTextField.getText().isEmpty()) { // handle error return; } int portNumber = Integer.parseInt(portNumberTextField.getText()); receivedFile = new File(destinationFolderTextField.getText() + "\\" + receivedFile.getName()); FileReceiver fileReceiver = new FileReceiver(portNumber, receivedFile, receiveProgressIndicator); fileReceiver.start(); } } ``` 请注意,此代码仅作为示例,并应该进行修改以满足您的特定需求和安全要求。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值