java能同时监控5个txt嘛

时间: 2024-04-02 18:35:54 浏览: 10
是的,Java可以同时监控多个txt文件。你可以使用Java的文件监控API,比如WatchService,来监控文件夹中的所有txt文件,并在文件发生变化时读取并处理文件内容。你可以在代码中指定要监控的文件夹和文件类型,例如.txt文件。通过使用多线程技术,你可以同时监控多个文件,而不会影响到程序的性能和稳定性。
相关问题

java实现U盘插入监控以及上传下载行为记录

可以使用Java提供的JNA库来实现U盘插入监控,同时使用Java的IO流来记录上传下载行为记录。具体实现可以参考以下代码: import com.sun.jna.platform.win32.*; import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.platform.win32.WinNT.HANDLEByReference; import com.sun.jna.platform.win32.WinNT.PVOID; import com.sun.jna.platform.win32.WinNT.ULONG_PTR; import com.sun.jna.platform.win32.WinUser.*; public class USBMonitor { private static final int WM_DEVICECHANGE = 0x0219; private static final int DBT_DEVICEARRIVAL = 0x8000; private static final int DBT_DEVICEREMOVECOMPLETE = 0x8004; private static final int DBT_DEVTYP_VOLUME = 0x00000002; private static final int DBT_DEVNODES_CHANGED = 0x0007; private static final int FILE_SHARE_READ = 0x00000001; private static final int FILE_SHARE_WRITE = 0x00000002; private static final int FILE_SHARE_DELETE = 0x00000004; private static final int OPEN_EXISTING = 3; private static final int GENERIC_READ = 0x80000000; private static final int GENERIC_WRITE = 0x40000000; private static final int FILE_ATTRIBUTE_NORMAL = 0x80; private static final int FILE_FLAG_BACKUP_SEMANTICS = 0x02000000; private static final String DRIVE_LETTER_PREFIX = "\\\\?\\"; private static final String VOLUME_GUID_PREFIX = "\\\\?\\Volume{"; private static final String VOLUME_GUID_SUFFIX = "}\\"; private static final String LOG_FILE_PATH = "C:\\usb_log.txt"; private static HANDLE hLogFile = null; public static void main(String[] args) { hLogFile = Kernel32.INSTANCE.CreateFile(LOG_FILE_PATH, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, null, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, null); if (hLogFile == WinBase.INVALID_HANDLE_VALUE) { System.err.println("Failed to open log file: " + LOG_FILE_PATH); return; } WndProc usbWndProc = new WndProc() { @Override public LRESULT callback(HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg == WM_DEVICECHANGE) { switch (wParam.intValue()) { case DBT_DEVICEARRIVAL: DEV_BROADCAST_VOLUME vol = new DEV_BROADCAST_VOLUME(lParam); if (vol.dbcv_devicetype == DBT_DEVTYP_VOLUME) { String driveLetter = getDriveLetter(vol.dbcv_unitmask); String volumeGuid = getVolumeGuid(driveLetter); log("U盘插入: " + volumeGuid); } break; case DBT_DEVICEREMOVECOMPLETE: DEV_BROADCAST_VOLUME vol2 = new DEV_BROADCAST_VOLUME(lParam); if (vol2.dbcv_devicetype == DBT_DEVTYP_VOLUME) { String driveLetter = getDriveLetter(vol2.dbcv_unitmask); String volumeGuid = getVolumeGuid(driveLetter); log("U盘拔出: " + volumeGuid); } break; case DBT_DEVNODES_CHANGED: log("设备节点变化"); break; } } return User32.INSTANCE.DefWindowProc(hWnd, uMsg, wParam, lParam); } }; String className = "USBMonitor"; WNDCLASS wc = new WNDCLASS(); wc.lpfnWndProc = usbWndProc; wc.hInstance = Kernel32.INSTANCE.GetModuleHandle(""); wc.lpszClassName = className; User32.INSTANCE.RegisterClass(wc); HWND hWnd = User32.INSTANCE.CreateWindowEx(0, className, className, 0, 0, 0, 0, 0, null, null, null, null); if (hWnd == null) { System.err.println("Failed to create window"); return; } DEV_BROADCAST_DEVICEINTERFACE notificationFilter = new DEV_BROADCAST_DEVICEINTERFACE(); notificationFilter.dbcc_size = notificationFilter.size(); notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; GUID guid = new GUID(); guid.guidData1 = 0xA5DCBF10; guid.guidData2 = 0x6530; guid.guidData3 = 0x11D2; guid.guidData4 = new byte[]{(byte) 0x90, 0x1F, 0x00, (byte) 0xC0, 0x4F, (byte) 0xB9, 0x51, (byte) 0xED}; notificationFilter.dbcc_classguid = guid; HDEVNOTIFY hDevNotify = User32.INSTANCE.RegisterDeviceNotification(hWnd, notificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE); if (hDevNotify == null) { System.err.println("Failed to register device notification"); return; } MSG msg = new MSG(); while (User32.INSTANCE.GetMessage(msg, hWnd, 0, 0) > 0) { User32.INSTANCE.TranslateMessage(msg); User32.INSTANCE.DispatchMessage(msg); } User32.INSTANCE.UnregisterDeviceNotification(hDevNotify); User32.INSTANCE.DestroyWindow(hWnd); Kernel32.INSTANCE.CloseHandle(hLogFile); } private static String getDriveLetter(int unitmask) { for (char c = 'A'; c <= 'Z'; c++) { if ((unitmask & 0x01) != 0) { return DRIVE_LETTER_PREFIX + c + ":"; } unitmask >>>= 1; } return null; } private static String getVolumeGuid(String driveLetter) { char[] volumeGuid = new char[1024]; int length = Kernel32.INSTANCE.QueryDosDevice(driveLetter, volumeGuid, volumeGuid.length); if (length == 0) { return null; } String volumeGuidStr = new String(volumeGuid, 0, length); if (!volumeGuidStr.startsWith(VOLUME_GUID_PREFIX) || !volumeGuidStr.endsWith(VOLUME_GUID_SUFFIX)) { return null; } return volumeGuidStr.substring(VOLUME_GUID_PREFIX.length(), volumeGuidStr.length() - VOLUME_GUID_SUFFIX.length()); } private static void log(String message) { String logMessage = String.format("[%s] %s\n", new Date(), message); byte[] logBytes = logMessage.getBytes(StandardCharsets.UTF_8); ULONG_PTR bytesWritten = new ULONG_PTR(); Kernel32.INSTANCE.WriteFile(hLogFile, logBytes, logBytes.length, bytesWritten, null); } } 注意:这段代码只能在Windows操作系统上运行。

nohup java -jar j.jar。 我想每次启动项目就会生成一个新文件监控项目

您可以使用Shell脚本来实现这个目的。首先,您需要在脚本中添加一行代码,用于生成一个新的文件名,比如: ``` LOG_FILE="log_$(date +%Y%m%d%H%M%S).txt" ``` 这行代码会在每次启动脚本时生成一个以当前时间命名的新文件。然后,您需要将启动命令添加到脚本中: ``` nohup java -jar j.jar > $LOG_FILE 2>&1 & ``` 这个命令会将java程序的输出重定向到新生成的日志文件中。最后,您可以将脚本保存为一个可执行文件,并在每次启动项目时运行它。

相关推荐

最新推荐

recommend-type

Sosoo 1.0网络爬虫程序.doc

设置是否要找网站跟目录下的/robot.txt文件【ignoreRobotsTxt】:用户可以通过设置这个值来忽略网站提供对robot的支持。默认为false robby.setIgnoreRobotsTxt(true); 设置url可以重复访问【visitMany】:系统提供...
recommend-type

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
recommend-type

matlab建立计算力学课程的笔记和文件.zip

matlab建立计算力学课程的笔记和文件.zip
recommend-type

FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
recommend-type

matlab基于RRT和人工势场法混合算法的路径规划.zip

matlab基于RRT和人工势场法混合算法的路径规划.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。