文件监视器

1.在web.xml配置文件监视器。
  <listener>
<listener-class>com.wgj.filter.FileModifyListener
</listener-class>
</listener>

2.监视器实现FileModifyListener.java
package com.wgj.filter;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;

public class FileModifyListener implements ServletContextListener {

FileThread fileThread;
Logger log = Logger.getLogger(FileModifyListener.class);
public FileModifyListener() {
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}

@Override
public void contextInitialized(ServletContextEvent sce) {
fileThread = new FileThread();
fileThread.setDaemon(true);//作为后台线程运行
log.debug("File Listener Initialized: OK" );
try {
// System.out.println("File Listener Initialized: OK");
fileThread.start();
} catch(Exception e) {
log.debug("File Listener contextInitialized:",e);
}
}

}


3.线程实现类FileThread.java
package com.wgj.home;

import java.io.File;

import javax.servlet.ServletContext;

public class FileThread extends Thread {
private File fileDir = null;
private String monitorPath = null;
private String storePath = null;
FileMonitor monitorFileDir =null;
FileMonitor monitorFile =null;

public FileThread() {
monitorPath = "c:\\";
storePath = "e:\";
FileMonitor monitorFileDir = new FileMonitor(1000);
FileMonitor monitorFile = new FileMonitor(1000);
fileDir = new File(monitorPath);
monitorFileDir.addFile(fileDir);
monitorFileDir.addListener(new MonitorFileDirChanger(monitorFile, fileDir));
File[] files = fileDir.listFiles();
for (int i = 0; i < files.length; i++) {
monitorFile.addFile(files[i]);
monitorFile.addListener(new MonitorFileChanger());
}
}

public void run() {
while (!false)
{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}

private class MonitorFileChanger implements FileListener {
public void fileChanged(File file) {
FileOperator fileCopy = new FileOperator();
fileCopy.copyFile(monitorPath + "\\" + file.getName(), storePath + file.getName());
}
}

private class MonitorFileDirChanger implements FileListener {
FileMonitor monitorFile;
File fileDir;

public MonitorFileDirChanger(FileMonitor monitorFile, File fileDir) {
this.monitorFile = monitorFile;
this.fileDir = fileDir;
}

public void fileChanged(File file) {
monitorFile.removeAllListener();
File[] files = fileDir.listFiles();
for (int i = 0; i < files.length; i++) {
monitorFile.addFile(files[i]);
monitorFile.addListener(new MonitorFileChanger());
}
FileOperator fileCopy = new FileOperator();
fileCopy.copyFolder(monitorPath, storePath);
}
}
}


4.其他工具类
4.1 FileListener.java
package com.wgj.home;

import java.io.File;

/**
* Interface for listening to disk file changes.
* @see FileMonitor
*
* @author <a href="mailto:jacob.dreyer@geosoft.no">Jacob Dreyer</a>
*/
public interface FileListener
{
/**
* Called when one of the monitored files are created, deleted
* or modified.
*
* @param file File which has been changed.
*/
void fileChanged (File file);
}


4.2 FileMonitor.java
package com.wgj.home;

import java.util.*;
import java.io.File;
import java.lang.ref.Reference;//WeakReference;


/**
* Class for monitoring changes in disk files.
* Usage:
*
* 1. Implement the FileListener interface.
* 2. Create a FileMonitor instance.
* 3. Add the file(s)/directory(ies) to listen for.
*
* fileChanged() will be called when a monitored file is created,
* deleted or its modified time changes.
*
* @author <a href="mailto:jacob.dreyer@geosoft.no">Jacob Dreyer</a>
*/
public class FileMonitor
{
private Timer timer_;
private HashMap files_; // File -> Long
private Collection listeners_; // of WeakReference(FileListener)


/**
* Create a file monitor instance with specified polling interval.
*
* @param pollingInterval Polling interval in milli seconds.
*/
public FileMonitor (long pollingInterval)
{
files_ = new HashMap();
listeners_ = new ArrayList();

timer_ = new Timer (true);
timer_.schedule (new FileMonitorNotifier(), 0, pollingInterval);
}



/**
* Stop the file monitor polling.
*/
public void stop()
{
timer_.cancel();
}


/**
* Add file to listen for. File may be any java.io.File (including a
* directory) and may well be a non-existing file in the case where the
* creating of the file is to be trepped.
* <p>
* More than one file can be listened for. When the specified file is
* created, modified or deleted, listeners are notified.
*
* @param file File to listen for.
*/
public void addFile (File file)
{
if (!files_.containsKey (file)) {
long modifiedTime = file.exists() ? file.lastModified() : -1;
files_.put (file, new Long (modifiedTime));
}
}



/**
* Remove specified file for listening.
*
* @param file File to remove.
*/
public void removeFile (File file)
{
files_.remove (file);
}



/**
* Add listener to this file monitor.
*
* @param fileListener Listener to add.
*/
public void addListener (FileListener fileListener)
{
// Don't add if its already there
for (Iterator i = listeners_.iterator(); i.hasNext(); ) {
// Reference reference = (Reference) i.next();

FileListener listener = (FileListener) i.next();//reference.get();
if (listener == fileListener)
return;
}

// Use WeakReference to avoid memory leak if this becomes the
// sole reference to the object.
listeners_.add (fileListener);//new Reference (
}



/**
* Remove listener from this file monitor.
*
* @param fileListener Listener to remove.
*/
public void removeListener (FileListener fileListener)
{
for (Iterator i = listeners_.iterator(); i.hasNext(); ) {
// Reference reference = (Reference) i.next();
FileListener listener = (FileListener) i.next();//reference.get();
if (listener == fileListener) {
i.remove();
break;
}
}
}

/**
* Remove listener from this file monitor.
*
* @param fileListener Listener to remove.
*/
public void removeAllListener ()
{
for (Iterator i = listeners_.iterator(); i.hasNext(); ) {
// Reference reference = (Reference) i.next();
FileListener listener = (FileListener) i.next();//reference.get();
i.remove();
}
}



/**
* This is the timer thread which is executed every n milliseconds
* according to the setting of the file monitor. It investigates the
* file in question and notify listeners if changed.
*/
private class FileMonitorNotifier extends TimerTask
{
public void run()
{
// Loop over the registered files and see which have changed.
// Use a copy of the list in case listener wants to alter the
// list within its fileChanged method.
Collection files = new ArrayList (files_.keySet());

for (Iterator i = files.iterator(); i.hasNext(); ) {
File file = (File) i.next();
long lastModifiedTime = ((Long) files_.get (file)).longValue();
long newModifiedTime = file.exists() ? file.lastModified() : -1;

// Chek if file has changed
if (newModifiedTime != lastModifiedTime) {

// Register new modified time
files_.put (file, new Long (newModifiedTime));

// Notify listeners
for (Iterator j = listeners_.iterator(); j.hasNext(); ) {
//Reference reference = (Reference) j.next();
FileListener listener = (FileListener) j.next();

// Remove from list if the back-end object has been GC'd
if (listener == null)
j.remove();
else
listener.fileChanged (file);
}
}
}
}
}


/**
* Test this class.
*
* @param args Not used.
*/
public static void main (String args[])
{
// Create the monitor
FileMonitor monitor = new FileMonitor (1000);
// Add some files to listen for
monitor.addFile (new File ("E:\\deploy\\test"));
monitor.addFile (new File ("E:\\deploy\\test\\1.txt"));
// Add a dummy listener
monitor.addListener (monitor.new TestListener());
// Avoid program exit
while (!false)
{

try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


private class TestListener implements FileListener {
public void fileChanged (File file) {
System.out.println ("File changed: " + file);
}
}
}


4.3 FileOperator.java

package com.wgj.home;

import java.io.*;


public class FileOperator {

public FileOperator() {
}

/**
* 新建目录
* @param folderPath String 如 c:/fqf
* @return boolean
*/
public void newFolder(String folderPath) {
try {
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
if (!myFilePath.exists()) {
myFilePath.mkdir();
}
}
catch (Exception e) {
System.out.println("新建目录操作出错");
e.printStackTrace();
}
}

/**
* 新建文件
* @param filePathAndName String 文件路径及名称 如c:/fqf.txt
* @param fileContent String 文件内容
* @return boolean
*/
public void newFile(String filePathAndName, String fileContent) {

try {
String filePath = filePathAndName;
filePath = filePath.toString();
File myFilePath = new File(filePath);
if (!myFilePath.exists()) {
myFilePath.createNewFile();
}
FileWriter resultFile = new FileWriter(myFilePath);
PrintWriter myFile = new PrintWriter(resultFile);
String strContent = fileContent;
myFile.println(strContent);
resultFile.close();

}
catch (Exception e) {
System.out.println("新建目录操作出错");
e.printStackTrace();

}

}

/**
* 删除文件
* @param filePathAndName String 文件路径及名称 如c:/fqf.txt
* @param fileContent String
* @return boolean
*/
public void delFile(String filePathAndName) {
try {
String filePath = filePathAndName;
filePath = filePath.toString();
java.io.File myDelFile = new java.io.File(filePath);
myDelFile.delete();

}
catch (Exception e) {
System.out.println("删除文件操作出错");
e.printStackTrace();

}

}

/**
* 删除文件夹
* @param filePathAndName String 文件夹路径及名称 如c:/fqf
* @param fileContent String
* @return boolean
*/
public void delFolder(String folderPath) {
try {
delAllFile(folderPath); //删除完里面所有内容
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
myFilePath.delete(); //删除空文件夹

}
catch (Exception e) {
System.out.println("删除文件夹操作出错");
e.printStackTrace();

}

}

/**
* 删除文件夹里面的所有文件
* @param path String 文件夹路径 如 c:/fqf
*/
public void delAllFile(String path) {
File file = new File(path);
if (!file.exists()) {
return;
}
if (!file.isDirectory()) {
return;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
}
else {
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path+"/"+ tempList[i]);//先删除文件夹里面的文件
delFolder(path+"/"+ tempList[i]);//再删除空文件夹
}
}
}

/**
* 复制单个文件
* @param oldPath String 原文件路径 如:c:/fqf.txt
* @param newPath String 复制后路径 如:f:/fqf.txt
* @return boolean
*/
public void copyFile(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { //文件存在时
InputStream inStream = new FileInputStream(oldPath); //读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
int length;
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数 文件大小
fs.write(buffer, 0, byteread);
}
inStream.close();
}
}
catch (Exception e) {
System.out.println("复制单个文件操作出错");
e.printStackTrace();
}
}

/**
* 复制整个文件夹内容
* @param oldPath String 原文件路径 如:c:/fqf
* @param newPath String 复制后路径 如:f:/fqf/ff
* @return boolean
*/
public void copyFolder(String oldPath, String newPath) {

try {
(new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹
File a=new File(oldPath);
//System.out.println("oldPath:"+oldPath);
String[] file=a.list();
File temp=null;
for (int i = 0; i < file.length; i++) {
if(oldPath.endsWith(File.separator)){
temp=new File(oldPath+file[i]);
}
else{
temp=new File(oldPath+File.separator+file[i]);
}

if(temp.isFile()){
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath + "/" +
(temp.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ( (len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if(temp.isDirectory()){//如果是子文件夹
copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);
}
}
}
catch (Exception e) {
System.out.println("copying all file error");//复制整个文件夹内容操作出错
e.printStackTrace();

}
}

/**
* 移动文件到指定目录
* @param oldPath String 如:c:/fqf.txt
* @param newPath String 如:d:/fqf.txt
*/
public void moveFile(String oldPath, String newPath) {
copyFile(oldPath, newPath);
delFile(oldPath);

}

/**
* 移动文件到指定目录
* @param oldPath String 如:c:/fqf.txt
* @param newPath String 如:d:/fqf.txt
*/
public void moveFolder(String oldPath, String newPath) {
copyFolder(oldPath, newPath);
delFolder(oldPath);

}
}
Windows使用进程监视器查看进程读写的文件名 进程监视器(Process Monitor)是用于Windows的高级监视工具,用于显示实时文件系统、注册表和进程/线程活动。 进程监视器包括强大的监视和筛选功能,包括: 为操作输入和输出参数捕获的更多数据 使用非破坏性筛选器可以设置筛选器而不丢失数据 捕获每个操作的线程堆栈使得在许多情况下能够识别操作的根本原因 可靠捕获进程详细信息,包括映像路径、命令行、用户和会话 ID 任何事件属性的可配置和可移动列 可以为任何数据字段设置筛选器,包括未配置为列的字段 高级日志记录体系结构可扩展到数千万 阅读详情

相关推荐

Filemon:全面监控文件系统操作的工具

本文还有配套的精品资源,点击获取 简介:Filemon File Monitor是一个高级系统监控软件,用于监测文件和文件夹的各类操作,包括读取、写入、创建和删除等。适用于开发者、系统管理员和故障排除人员,它提供实时活动显示、详细操作信息、过滤和搜索功能、日志记录以及用户友好的界面。尽管Filemon最初是Sysinternals Suite的一部分并由Mark Russi...

weixin_42466723的博客 4078

文件系统监视器

QFileSystemWatcher类通过监视指定路径的列表来监视文件系统对文件和目录的更改。构造函数: 常用函数:常用的信号:例子:在Widget.h文件中添加: 在WIdget.cpp构造函数中添加: 槽函数的实现: 当你修改目录和文件时,会在控制台输出目录改变或文件改变

qq_45303986的博客 482

文件监视器工具深度解析与实战应用

hDirectory:已打开的目录句柄,需带有访问权限。lpBuffer:输出缓冲区,用于存放结构数组。:缓冲区大小,建议设置为8KB以上以防溢出。:是否递归监控子目录(布尔值)。:过滤条件,如。:支持异步I/O的关键参数,启用重叠I/O可避免阻塞主线程。任何一次文件操作的本质都可以抽象为:“谁在何时对哪个文件执行了何种动作,结果如何”。围绕这一逻辑主线,应确立五个不可缺失的核心字段:字段名类型含义说明timestamp。

weixin_42591908的博客 1252

Directory Monitor:全方位监控文件系统变动的专业利器

Directory Monitor是一款强大易用的实时文件系统监视工具,它由Michael Humpa开发,专为满足用户监控特定目录下文件和子目录变化的需求。无论是为了保障系统安全、追踪日志文件更新,还是实施自动化任务,Directory Monitor都能够提供全面的支持。这款跨平台的应用程序可以在Windows环境下运行,通过持续监测选定的文件夹,实时反馈任何类型的文件操作行为,从而让用户能够及时了解并应对任何可能影响文件系统的变化。

IT技术分享社区 3397

文件系统监视器(Filemon) v7.0.2绿色汉化版.rar

Filemon(汉化中文版)一款出色的文件监控制软件,它可以监视应用程序进行的文件读写操作。将所有与文件操作(如读取修改等)记录全部记下来,用户保存、过滤、查找这些记录,为系统的维护提供了极大的便利。

文件监视工具ProcessActivityView(文件监视器)

Windows文件监视器程序可以对指定的某个盘符或某个目录进行监视,监视的内容包括任何文件及子文件夹的新建、删除、重命令、大小修改等等,并显示监视的结果。

Pycharm 文件监视器

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33790053的博客 1026

Windows文件监视器

Windows文件监视器,能监视指定目录的文件生成、修改、删除、重命名,监视程序对系统文件的操作,程序需要.net 2.0的支持才能运行。

Qt文件修改监视器

Qt文件修改监视器

xinxinnigexx的博客 333

文件监控(文件的创建、修改、删除、重命名的操作监视)

监视文件夹里面的文件的创建、修改、删除、重命名。支持对特定文件类型进行监视。

文件夹监视器(Directory Monitor) v2.12.0.3 汉化绿色版.rar

Directory Monitor 监视文件夹中文件的变化:它会对文件更改,删除,修改,新建文件,文件更改进行通知,修改,删除,新的文件监控目录。监控本地目录或网络共享。快速判断一个目录可用,并且被监视。每当气球通知事件被触发。自动更新导入/导出。 主要功能: 实时监控文件夹的一切改动,如重命名、移动、复制、删除、访问等 监控本地的网络共享(包括隐藏及私人共享) 监控信息可通过气泡弹出通知用户 选项来检测子目录中的所有文件和更改文件属性 选择当一个事件发生时执行应用程序/脚本 排除、过滤目录 可自定义插件扩展功能

基于QFileSystemWatcher 的文件监视器

基于QFileSystemWatcher 的文件监视器 特点: 监视器监测单个文件 监视器没有运行时,目标文件有更新,运行之后打印更新的内容 监视器运行时,实时监控文件内容变化,把变化的内容打印出来 #include <QSettings> #include <QFileSystemWatcher> #include <QFile> #include &l...

TuringEvo专栏 323

文件监控服务(检测文件变化后执行程序)

编写背景:公司要求整一个语音播放的网页,通过web界面在文本框内输入文字后,将这些文字转换成语音,然后播放到广播系统,于是就写了这么一个windows小服务 功能说明:检测一个或者多个文件的变化,一旦变化,立刻执行对应的程序或者脚本。 程序配置文件说明 AppCfg.dat 说明:扫描频率(秒) 监视列表:"/"换行,等号之前为条件执行程序,等号之后为监视文件路径,可以设置多个。冒号可加,可不加 例子:"E:\test.bat"="E:\4.txt",E:\3.txt;/ "执行文件路径"="监视文件路径"(支持UNC路径) 配置文件示例: 扫描频率=5 监视列表=/ D:\语音播报\播放内容\临时通知.vbs=D:\语音播报\播放内容\临时通知.txt;/ D:\语音播报\播放内容\临时通知.vbs=\\192.168.1.200\播放内容\临时通知.txt; 环境依赖: .net 4.0 程序安装后,运行services.msc,会有一项“语音服务”,是以服务形式安装的,需要允许桌面交互,程序本身没有操作界面,修改配置文件可以达到你想要的目的,修改配置文件后重启该服务生效。 完美支持操作系统:win2003以下, 可兼容支持WIN7以上:因win7以上系统权限的缘故,会导致指定的执行程序出现权限问题,若你的执行程序能绕过这问题,那就没什么了

解决系统文件监视器(File Watchers)数量限制问题

在前端开发过程中,特别是使用如 `Vite`、`Webpack` 等构建工具时,可能会遇到一个常见的错误:`ENOSPC: System limit for number of file watchers reached`。这个错误的原因是系统中可用的文件监视器数量已经达到了上限,从而无法继续监视新的文件变化。

常备不懈 3501

思澈sdk-新建lcd

co5300至此有3个同ID的驱动,在co5300xxxx.c的LCD_DRIVER_EXPORT(co5300, LCD_ID, &lcdc_int_cfg, &CO5300_drv, LCD_PIXEL_WIDTH, LCD_PIXEL_HEIGHT, 2);2 在customer\peripherals\Kconfig_lcd中添加如下配置(注意修改的地方有两个LCD_USING_TFT_CO5300_143)5 在该文件中的config LCD_DPI配置项下添加:(这里300为DPI)

gongyuan073的专栏 1385

Ai数字人直播系统源码部署

虚拟形象定制,直播内容智能生成,多语言支持,智能互动,声音克隆,24 小时不间断直播,多平台直播,智能数据分析,实时情感识别,视频合成,Ai数字人直播系统源码出售,Ai数字人直播系统源码部署实现 AI 数字人 24 小时不间断直播功能是一个较为复杂的任务,涉及到多个方面,如直播流的推送、内容的持续生成、系统的稳定性保障等。以下为你提供一个简化的实现思路和示例代码,借助 Python 结合 FFmpeg 工具来模拟 24 小时不间断直播。

weixin_ggwwsscc的博客 1256

PyCharm 中使用文件监视器自动处理 Python 文件

PyCharm 是一个功能强大的 IDE,它的文件监视器(File Watchers)功能可以帮助开发者自动执行一些常见任务,比如代码格式化、静态分析、测试运行等。这篇文章将详细介绍如何配置文件监视器,使其在保存 Python 文件时自动运行指定的工具。

li_yatao的博客 1474

5G LDPC编码实战:从校验矩阵到Matlab代码实现(附完整源码)

本文深入解析5G NR标准中的LDPC编码工程实现,聚焦于从3GPP协议中的QC-LDPC校验矩阵到高效Matlab代码的转换。文章详细阐述了基础矩阵(BG1/BG2)选择、提升因子确定以及利用双对角结构的快速编码算法,并提供了完整的、可优化的Matlab源码,旨在帮助通信算法工程师和开发者快速构建5G LDPC编码仿真原型,为硬件实现奠定基础。

table的专栏 377

NSFW 文件监视器项目推荐

NSFW 文件监视器项目推荐 1. 项目基础介绍和主要编程语言 NSFW(Node Sentinel File Watcher)是一个高性能、可扩展的文件监视器,专为Node.js环境设计。该项目的主要编程语言包括C++和JavaScript。NSFW旨在为Linux、OSX和Windows操作系统提供一致的文件监视接口,确保在不同平台上都能高效运行。 2. 项目的核心功能 NSFW的核心功能是提...

gitblog_01044的博客 650

Zotero+Obsidian+Bookxnote联动让文献阅读丝滑般体验

摘录文字或图片到Obsidian

weixin_43694742的博客 1万+

React 源码解析 | Reconcile协调过程

上篇讲了React的工作流程,这篇详细的讲一下render过程中的beginWork函数,也就是深度优先创建Fiber树中"递"的过程。beginWork函数传入当前已经创建好的Fiber节点,返回创建/复用的第一个子FIber节点,也就是wip.child在renderRoot中,在开始创建整棵FIber树之前,会先调用prepareRefreshStack创建/复用一个新的HostRootFiber。

weixin_40710412的博客 1220

文件监视器( FileSystemWatcher) 类的使用

正如你所想象的,文件监视器类的作用正如其字面含义,它监视一个系统文件,你只需给一个路径,它将触发一个事件当这个路径下文件变化时.它可以监视文件的"重命名","删除","改变"和"创建".让我们来看一下代码: 1FileSystemWatcherwatcher=newFileSystemWatcher(); 2watcher.Path=@"C:\MyDirectory"; 3wat...

weixin_34175509的博客 1250

王炸联动!OpenClaw 对接微信 / 企业微信保姆级教程,AI 办公效率翻倍

《OpenClaw对接微信/企业微信全指南》摘要:本文提供开源AI智能体OpenClaw与微信生态的完整对接教程。核心内容包括企业微信配置四步法(获取凭证、修改配置、重启服务、验证对接)和个人微信通过企业微信插件的一键打通方案。对接后支持微信/企微发指令AI秒执行、群聊机器人、文件同步等高效办公场景,并附常见问题排查代码。教程强调配置简单(全程可复制代码)、适用广泛(个人/团队场景),实现沟通与AI协作的无缝衔接。文末包含端口放行等实用命令,助力用户快速实现移动端AI办公。(149字)

2501_93651177的博客 584

文件系统监视器(Spatie's FileSystemWatcher)教程

文件系统监视器(Spatie's FileSystemWatcher)教程 1. 项目目录结构及介绍 Spatie的file-system-watcher是一个用于监控文件系统变化的PHP库,它提供了简洁的API来监听文件或目录的创建、更新、删除等事件。尽管提供的GitHub链接指向具体的仓库是必要的,但请注意,我将基于该类型项目的通用结构和功能进行说明,因为具体的目录结构可能在不同版本中有所变动...

gitblog_00476的博客 914

【TC3xx芯片】TC3xx芯片PFlash的ECC校验问题补充

TC3xx芯片PFlash的ECC校验问题补充

qq_36056498的博客 1153

Tmux学习总结

Tmux 重要概念 使用 Tmux 的时候千万不要去背指令,所有的指令都可以在 .tmux.conf 配置文件中绑定自己顺手的快捷键,也可以配置开启鼠标。 这个是我的配置文件:https://github.com/zuorn/tmux.conf 在Tmux逻辑中,需要分清楚Server > Session > Window > Pane这个大小和层级顺序是极其重要的,直接关系到工作效率: Server:是整个tmux的后台服务。有时候更改配置不生效,就要使用tmux kill-

满目星辰 578
上一篇: Java指定编码读写文件
下一篇: Enum列举的用法
danwind
博客等级 码龄19年 6粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值