- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在此代码中,我希望使用给定路径内容的最新版本更新 HashMap,并将绝对路径作为字符串用作键。问题是 WatchEvent
的 .context()
方法在每个事件上为同一文件提供了不同的相对路径。
这是一段代码:
else if(event.kind()==StandardWatchEventKinds.ENTRY_MODIFY)
{
/*Variable path is a Path of "//workspaces", set earlier.*/
Path oldfilepath=path.resolve((Path)event.context()); /*problem line*/
String oldfilepathstring = oldfilepath.toString();
FileReader oldIn = new FileReader(oldfilepathstring);
BufferedReader br = new BufferedReader(oldIn);
String line;
List<String> newfiletext=new LinkedList<>();
while((line = br.readLine())!=null)
newfiletext.add(line);
List<String> previousText=new LinkedList<>();
if((previousText = fileMappings.get(oldfilepathstring))!= null)
{
System.out.println("previoustext:\n"+previousText);
System.out.println("newfiletext:\n"+newfiletext);
}
fileMappings.put(oldfilepathstring, newfiletext);
System.out.println(fileMappings.keySet()+"\n"+fileMappings.values());
}
}
这里是修改监视目录中的文件 b.txt
时的示例输出内容“abc”到“abc123"
请注意,所有这些都来自打开文件/workspaces/b.txt(已经存在)并修改其内容。):
run: ENTRY_CREATE:.goutputstream-BRC1HX ENTRY_MODIFY:.goutputstream-BRC1HX [/workspaces/.goutputstream-BRC1HX] [[]] ENTRY_MODIFY:.goutputstream-BRC1HX previoustext: [] newfiletext: [abc] [/workspaces/.goutputstream-BRC1HX] [[abc]] ENTRY_CREATE:b.txt~ ENTRY_CREATE:b.txt ENTRY_CREATE:.goutputstream-MFJ6HX ENTRY_MODIFY:.goutputstream-MFJ6HX [/workspaces/.goutputstream-MFJ6HX, /workspaces/.goutputstream-BRC1HX] [[], [abc]] ENTRY_MODIFY:.goutputstream-MFJ6HX previoustext: [] newfiletext: [abc, 123] [/workspaces/.goutputstream-MFJ6HX, /workspaces/.goutputstream-BRC1HX] [[abc, 123], [abc]] ENTRY_CREATE:b.txt~ ENTRY_CREATE:b.txt
兴趣线是 Path oldfilepath=path.resolve((Path)event.context());
请注意 oldfilepath
是如何解析为“/workspaces/.goutputstream-MFJ6HX”,以及后来为同一文件解析为“/workspaces/.goutputstream-BRC1HX”。
event.context()
在每次修改后为同一文件返回不同的路径。这是一个 Linux 问题,还是一个 Java 问题,我究竟如何获得该文件的标准相对路径(在本例中为“b.txt”)?
似乎当我执行修改时,我得到了一系列创建/修改/创建事件,并且 ENTRY_CREATE
具有正确的文件名,而 ENTRY_MODIFY
s 有一个临时句柄(我猜是保存之间使用的文件的临时版本。)我需要能够捕获文件修改并从该事件中提取正确的文件名。
我知道我的文件系统可能正在后台创建和处理临时文件,而我只是打开、修改和保存文件,但是我该如何从临时文件中提取正确的文件名,事件指示 ENTRY_MODIFY
给我?是否有某种方法可以对与此修改有关的事件进行分组,以便我可以找到封闭的 ENTRY_CREATE
并从中获取文件名?或者以某种方式向上遍历导致此 ENTRY_CREATE
的调用堆栈?
我可以在每个 ENTRY_MODIFY
周围的封闭 ENTRY_CREATE
事件中看到文件名,但我希望有一种比以某种方式(获取不是 ENTRY_MODIFY
的最近事件,然后从中获取 .context()
。)
谢谢!
最佳答案
我遇到了同样的问题。我认为它与任何 Linux 问题或任何 Java 问题无关。这正是 b.txt 的编辑器(我假设是 gedit)处理事情的方式。
保存后
使用一些随机 xxxx(您看到的创建)创建一个新的临时文件“.goutputstream-xxxx”,
将新内容写入此文件(您看到的修改),
将原始文件重命名为 b.txt~(您看到的创建),
并将临时文件重命名为 b.txt(您看到的创建)
所以我想您必须注意 b.txt 的 ENTRY_MODIFY 和 ENTRY_CREATE 才能真正看到所有文件修改。
关于java - WatchService WatchEvent .context() 方法在 ENTRY_MODIFY 上返回不一致的文件相对路径(goutputstream-####,Linux 操作系统),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24315840/
我正在尝试加载外部 SVG 并将其附加到 Electron 项目中的现有 SVG。 d3.xml 方法对我不起作用,所以我正在查看 d3.symbols ,希望如果我提供路径数据(来自 fs.read
我正在编写一个 Web 应用程序,使用 Go 作为后端。我正在使用这个 GraphQL 库 (link)和 Echo Web 框架 (link) .问题在于 graphql-go 库在 Go 中使用了
有没有办法改造 gin.Context至 context.Context在围棋?构建 Go 微服务应该使用什么? 最佳答案 标准库的 context.Context type 是一个接口(interf
如果我能够像这样注册一个接收器: LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new Inte
如果我有 appengine.Context 而不是 ,我不知道如何调用 cloud.WithContext 和 google.DefaultClient >上下文。上下文。 有(旧的)“appeng
有什么区别- AccountManager accountManager = (AccountManager) context.getSystemService(Context.ACCOUNT_SER
我刚读了这篇文章:Build You Own Web Framework In Go为了在处理程序之间共享值,我选择了 context.Context我通过以下方式使用它在处理程序和中间件之间共享值:
在 Visual Studio Code 中,我对 3 个“上下文”菜单项感到非常困惑:Run Tests in Context和 Debug Tests in Context和 Run .NET C
我正在使用带有 和 @Autowired 的 Spring 2.5.6 版本。 虽然我在调度程序上下文中使用 SimpleUrlHandlerMapping ,但一切正常 - Autowiring 工
我使用的是 Context.registerReceiver()、Context.sendBroadcast(Intent) 和 Context.unregisterReceiver() 但是当我看到
问题在于以下错误, [错误] 在 scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4580)[错误] 在 scal
最近我正在尝试使用 SoundPool 在我的应用程序中播放一些简单的音效 但不幸的是它在 AVD 中不起作用并且应用程序崩溃 “上下文”到底是什么意思? 完全不懂 提前致谢 最佳答案 任何上下文都允
我正在使用上下文建议器,我想知道我们是否可以设置用于建议的上下文范围,而不是使用所有上下文。 目前查询需要匹配所有上下文。我们能否在上下文中添加“或”运算和/或指定用于特定查询的上下文? 以here为
我被一个使用这种方法的函数卡住了。所以我知道如何使用 expressionValue(with:context:) 函数,但上下文如何参与对我来说仍然是不透明的。也许有人有简单的例子? try tra
我正在尝试在上下文管理器中更改我的 python 程序中的目录。使用 invoke.context.Context 似乎是正确的方法,从 Fabric 文档中获取并且使用常规 with os.chdi
我最近开始使用 Android Studio 处理我的 Android 项目。我注意到在 IDE 的右下角,有文本 Context: .好奇心打败了我,所以现在我正在网上搜索更多信息。我还没有找到任
假设我有这些功能: func A(ctx context.Context) { // A takes some time to process } func B(ctx context.Con
所以,我有一个 context.Context( https://golang.org/pkg/context/ ) 变量,有没有办法列出这个变量包含的所有键? 最佳答案 可以使用不安全反射列出 co
我正在尝试找出传播 context.Context 的正确方法用于在使用 Gin 时使用 OpenTelemetry 进行跟踪。 我目前有一个 gin调用函数并传递 *gin.Context 的处理程
我们可以使用 Remove["context`*"] 删除特定上下文中的所有符号。 .但是是否可以删除 "context`"自己从系统中删除,以便它不再在 Contexts[] 中列出? 最佳答案 据
我是一名优秀的程序员,十分优秀!