【问题标题】:What gets sent to a application when you open a file?打开文件时会向应用程序发送什么?
【发布时间】:2017-05-02 19:51:00
【问题描述】:
所以,我的问题很简单(而且我不够聪明,无法找到答案)
当您单击文件时,例如blahblahblah.txt。例如,由于您的默认文本编辑器是textedit.app,计算机是否将应用程序blahblahblah.txt 的文件路径作为参数发送。
抱歉,我是处理文件的新手。
我之所以问这个问题是因为,如果我将 .jar 文件打包到 .exe 中,我对计算机如何处理这个问题感到困惑。
【问题讨论】:
标签:
java
file
event-handling
operating-system
【解决方案1】:
将使用不同的机制,具体取决于操作系统以及您实际在做什么。
当您双击文件以在(例如)编辑器中打开它时,操作系统通常会:
- 确定文件的类型(通过其元数据、后缀或一些启发式方法)
- 查找与文件类型关联的应用程序
- 启动应用程序,将文件的路径名作为参数传递
(细节是特定于操作系统的......但与我认为你真正要问的内容并不真正相关。)
但是当您启动一个包含在 EXE 中的 JAR 文件时,EXE 本身将负责 JVM 的启动。它将如何执行取决于 EXE 是如何生成的;即您使用的第 3 方工具。
无论哪种方式,当您运行包装 JAR 的 EXE 时发生的情况可能与您(例如)双击文本文件时发生的情况不同。
【解决方案2】:
这是高度系统特定的。通常,您所描述的是正在使用的图形外壳的功能。
一些系统,例如太监,根本没有文件扩展名的概念。扩展名只是文件命名约定。 Enuchs 图形外壳必须解析文件名才能找到扩展名。
其他操作系统具有文件扩展名或类型与文件名分开编码的文件系统。
在 Windoze(它确实单独存储文件扩展名)上,应用程序映射是通过注册表完成的。
在 Mac 上,有一个启动服务数据库来进行映射。它比 Windoze 系统复杂得多。
在命令行中情况完全不同。在 Eunuchs 命令行 shell 中,“扩展”是没有意义的。
在其他系统上,有默认扩展。如果您在 Windoze 提示符下并键入
程序
命令解释器查找带有 .com、.bat 或 .exe 的“程序”。
在 VMS 上,
R 程序
使命令解释器查找 PROGRAM.EXE 并运行它。或者
@文件
使命令解释器查找并执行命令文件file.com。
因此,您正在处理两个系统特定的变量:
底层文件系统是否支持文件扩展名?
shell 如何将文件扩展名映射到应用程序。