简体   繁体   English

手动打开Excel/记事本文件(用户打开),想通过java程序识别这个

[英]Manually opened Excel / Notepad file (Opened by user), How would like to identify this through java program

Description: Actually I am looking the java code which is basically running in the background, But whenever I want to open a new notepad or excel file, It will capture those file as an input and display the result in output console.描述:实际上我正在寻找基本上在后台运行的 java 代码,但是每当我想打开一个新的记事本或 excel 文件时,它会捕获这些文件作为输入并在 Z78E6221F6393D13566681 控制台中显示结果。

How I can do that, any one can help me on this.我怎么能做到这一点,任何人都可以帮助我。

The following mathod is based on Windows...以下方法基于 Windows...

First of all, when opening files in software like Notepad and Excel, it is executed with a command line with parameters, that is, if Notepad is opened in E:\test.txt, the command line parameters for startup are首先,在记事本、Excel等软件中打开文件时,是用带参数的命令行执行的,即如果记事本在E:\test.txt中打开,启动的命令行参数为

notepad E:\test.txt

In Windows, we can use the wmic command to get the startup parameters of an application.在 Windows 中,我们可以使用wmic命令获取应用程序的启动参数。 The specific usage is:具体用法是:

wmic process where caption="{exe_name}" get caption,commandline /value

For example, the cmd command to query the command line parameters opened in Notepad is:例如,查询记事本中打开的命令行参数的cmd命令为:

wmic process where caption="notepad.exe" get caption,commandline /value

The returned result is similar to the following:返回的结果类似于以下内容:

Caption=notepad.exe
CommandLine="C:\Windows\system32\NOTEPAD.EXE" H:\2019Summer\软件工程\任务.txt

The above "H:\2019Summer\软件工程\任务.txt" is the file I currently open by notepad.上面的“H:\2019Summer\软件工程\任务.txt”是我目前用记事本打开的文件。 What we need to do is to parse the result String, here is my example java code:我们需要做的是解析结果字符串,这是我的示例 java 代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class GetOpenedFile {
    //QUERY_COMMAND
    private static String QUERY_COMMAND = "wmic process where caption=\"{0}\" get caption,commandline /value";
    private static String NOTEPAD_NAME = "notepad.exe";
    private static String EXCEL_NAME = "excel.exe";

    /**
     * get execName command line
     *
     * @param execName like notepad.exe, excel.exe
     * @return the all command line of the process {execName}
     */
    private static List<String> getExecCommandLines(String execName) {
        Runtime runtime = Runtime.getRuntime();
        List<String> commandLines = new ArrayList<>();
        try {
            Process process = runtime.exec(MessageFormat.format(QUERY_COMMAND, execName));
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GB2312"));//set your cmd charset(default value is utf8)
            String caption = null;
            while (true) {
                String s = bufferedReader.readLine();
                if (s == null) {
                    break;
                }
                if (s.length() == 0) {//skip blank string
                    continue;
                }
                //get the file name
                if (s.startsWith("Caption")) {
                    caption = s.substring("Caption=".length());
                    continue;
                }
                if (s.startsWith("CommandLine=") && caption != null) {
                    int index = Math.max(s.indexOf(caption), s.indexOf(caption.toUpperCase()));//maybe the exe file name is ALL UPPER CASE, eg. NOTEPAD.EXE
                    index += caption.length()
                            + 1;//Double quotes "
                    String commandLine = s.substring(index);// command Line
                    commandLine = commandLine.stripLeading();//strip leading white space
                    commandLines.add(commandLine);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return commandLines;
    }

    /**
     * get notepad opened files
     *
     * @return notepad opened files
     */
    public static List<String> getNotepadOpenedFiles() {
        List<String> commandLines = getExecCommandLines(NOTEPAD_NAME);
        return commandLines.stream()
                .filter(s -> s.length() > 0)//skip empty command line
                .collect(Collectors.toList());
    }

    /**
     * get excel opened files
     * @return excel opened files
     */
    public static List<String> getExcelOpenedFiles() {
        List<String> commandLines = getExecCommandLines(EXCEL_NAME);
        return commandLines.stream()
                .filter(s -> s.length() > 0)//skip empty command line
                .map(s -> {             //map result of "filename" to filename
                    if (s.startsWith("\"") && s.endsWith("\"")) {
                        return s.substring(1, s.length() - 1);
                    } else {
                        return s;
                    }
                })
                .collect(Collectors.toList());
    }

    public static void main(String[] args) {
        //console printed
//        [H:\2019Summer\软件工程\任务.txt]
//        [E:\info.xlsx]
        System.out.println(getNotepadOpenedFiles());
        System.out.println(getExcelOpenedFiles());
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在Java中如何解锁文件或写入由excel打开的文件 - In java how can I unlock a file or write to a file opened by excel 如何捕获在Java Web应用程序中关闭打开的Excel文件的事件 - How to capture the event of closing an opened excel file in java web application 如何在Java中创建utf-8编码的文件,以便在notepad ++ / notepad或任何其他文本编辑器中打开时显示为UTF-8编码 - How to create a utf-8 encoded file in java such that it shows as UTF-8 encoded when opened in notepad++/notepad or any other text editor 我是否需要在 Java 中手动关闭文件(使用路径打开)? - Do I need to close a file (opened using Paths) manually in Java? 如何关闭单个 excel 文件,而不是当前使用 java 打开的所有 excel 文件 - How to close a single excel file, not all excel files which are currently opened using java 如何获取Java中打开文件的引用? - How to Get reference of Opened file in Java? 如何获取在java程序中打开的完整文件名和文件路径? - How to get complete file name and path of file which is opened in java program? 通过打开文件关闭程序 - Close program by opened by her file 默认情况下,如何在任何计算机上使用Java打开Java程序 - How to make a Java program be opened by default with Java, on any computer 如何从Java开始关注shell打开文件的默认程序? - How to give focus to default program of shell-opened file, from Java?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM