首页 \ 问答 \ 使用java中的命令提示符(Using the command prompt from java)

使用java中的命令提示符(Using the command prompt from java)

我试图用一些简单的命令为Windows命令提示符创建一个Java GUI。 我有一些额外输入的问题。 我可以运行“dir”命令但是当我运行“del”命令时,我需要给出确认,但我似乎无法打印出确认消息。

public static void main(String args[])
{
    try {
        Process p = Runtime.getRuntime().exec("cmd /c dir");
        read(p);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private static void read(Process p)
{
    try{
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;
        while((line=input.readLine()) != null) {
            System.out.println(line);
        }   
    }
    catch(IOException e1) { e1.printStackTrace(); }
}

输出:

 Volume in drive E has no label.
 Volume Serial Number is E9ED-7E32

 Directory of E:\Code\workspace\Project

04/11/2012  11:07 PM    <DIR>          .
04/11/2012  11:07 PM    <DIR>          ..
04/11/2012  09:53 PM               301 .classpath
04/11/2012  09:53 PM               383 .project
04/11/2012  09:53 PM    <DIR>          .settings
04/12/2012  12:09 AM    <DIR>          bin
04/12/2012  12:09 AM    <DIR>          src
04/11/2012  11:07 PM    <DIR>          test
               2 File(s)            684 bytes
               6 Dir(s)  429,106,937,856 bytes free

但是运行它会导致它挂起在line=input.readLine()

public static void main(String args[])
{
    try {
        Process p = Runtime.getRuntime().exec("cmd /c del test");
        read(p);
        OutputStream oStream = p.getOutpuStream();
        BufferedWriter sWriter = new BufferedWriter(newOutputStreamWriter(oStream));
        sWriter.write("y");
        sWriter.newLine();
        oStream.close();
        read(p);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我该如何防止这种悬挂? 我也担心确认“y”没有正确发送。 我觉得它应该读取输出并写入输入,但这是我在多个站点在线发现的方式。 任何帮助,将不胜感激。


I am trying to make a Java GUI for the windows command prompt with some simple commands. I am having some issues with additional input. I can run the "dir" command but when I run the "del" command, I need to give a confirmation, but I cant seem to get it to print out the confirmation message.

public static void main(String args[])
{
    try {
        Process p = Runtime.getRuntime().exec("cmd /c dir");
        read(p);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private static void read(Process p)
{
    try{
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;
        while((line=input.readLine()) != null) {
            System.out.println(line);
        }   
    }
    catch(IOException e1) { e1.printStackTrace(); }
}

Output:

 Volume in drive E has no label.
 Volume Serial Number is E9ED-7E32

 Directory of E:\Code\workspace\Project

04/11/2012  11:07 PM    <DIR>          .
04/11/2012  11:07 PM    <DIR>          ..
04/11/2012  09:53 PM               301 .classpath
04/11/2012  09:53 PM               383 .project
04/11/2012  09:53 PM    <DIR>          .settings
04/12/2012  12:09 AM    <DIR>          bin
04/12/2012  12:09 AM    <DIR>          src
04/11/2012  11:07 PM    <DIR>          test
               2 File(s)            684 bytes
               6 Dir(s)  429,106,937,856 bytes free

But running this will cause it to hang at line=input.readLine()

public static void main(String args[])
{
    try {
        Process p = Runtime.getRuntime().exec("cmd /c del test");
        read(p);
        OutputStream oStream = p.getOutpuStream();
        BufferedWriter sWriter = new BufferedWriter(newOutputStreamWriter(oStream));
        sWriter.write("y");
        sWriter.newLine();
        oStream.close();
        read(p);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

How do I prevent this hanging? I am also concerned that the confirmation "y" isn't being sent correctly. I feel like it should be read the output and write the input, but this is the way that I found at multiple sites online. Any help would be appreciated.


原文:https://stackoverflow.com/questions/10117373
更新时间:2022-02-17 11:02

最满意答案

Sub Tester()
    Const HDR_ROW As Long = 6
    Dim c As Range, sht As Worksheet, f As Range
    Dim lr As Long, r As Long, tmp, delCol As Boolean

    Set sht = ActiveSheet
    Set c = sht.Cells(HDR_ROW, Columns.Count).End(xlToLeft)

    Do While c.Column > 2
        delCol = False 'reset delete flag

        If Instr(c.Value, ".") > 0 Then

           'look for a matching column header
            Set f = sht.Rows(HDR_ROW).Find(Replace(c.Value, ".", ""), _
                                            lookat:=xlWhole)
            'found a column and it's not the same one we're working on...
            If Not f Is Nothing And f.Column <> c.Column Then
                Debug.Print c.Address(), f.Address()
                lr = sht.Cells(Rows.Count, c.Column).End(xlUp).Row
                'move any non-blank values over (source data has lots of spaces?)
                For r = HDR_ROW + 2 To lr
                    tmp = Trim(sht.Cells(r, c.Column).Value)
                    If Len(tmp) > 0 Then
                        sht.Cells(r, f.Column).Value = tmp
                    End If
                Next r
                delCol = True 'going to delete this column
            End If  'header has a no-"." match

        End If      'header has a "."

        Set c = c.Offset(0, -1)
        If delCol Then c.Offset(0, 1).EntireColumn.Delete
    Loop
End Sub

Sub Tester()
    Const HDR_ROW As Long = 6
    Dim c As Range, sht As Worksheet, f As Range
    Dim lr As Long, r As Long, tmp, delCol As Boolean

    Set sht = ActiveSheet
    Set c = sht.Cells(HDR_ROW, Columns.Count).End(xlToLeft)

    Do While c.Column > 2
        delCol = False 'reset delete flag

        If Instr(c.Value, ".") > 0 Then

           'look for a matching column header
            Set f = sht.Rows(HDR_ROW).Find(Replace(c.Value, ".", ""), _
                                            lookat:=xlWhole)
            'found a column and it's not the same one we're working on...
            If Not f Is Nothing And f.Column <> c.Column Then
                Debug.Print c.Address(), f.Address()
                lr = sht.Cells(Rows.Count, c.Column).End(xlUp).Row
                'move any non-blank values over (source data has lots of spaces?)
                For r = HDR_ROW + 2 To lr
                    tmp = Trim(sht.Cells(r, c.Column).Value)
                    If Len(tmp) > 0 Then
                        sht.Cells(r, f.Column).Value = tmp
                    End If
                Next r
                delCol = True 'going to delete this column
            End If  'header has a no-"." match

        End If      'header has a "."

        Set c = c.Offset(0, -1)
        If delCol Then c.Offset(0, 1).EntireColumn.Delete
    Loop
End Sub

相关问答

更多

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)