开发者

Outputting result of "dir" to console in Java

开发者 https://www.devze.com 2023-02-28 11:26 出处:网络
I want to output the result of the \"dir\" command to the java console. I have already looked on Google and here, but none of the examples work for me, thus making me rite this post.

I want to output the result of the "dir" command to the java console. I have already looked on Google and here, but none of the examples work for me, thus making me rite this post.

My code is as follows:

try
    {
        System.out.println("Thread started..");
        String line = "";
        String cmd = "dir";

     开发者_StackOverflow   Process child = Runtime.getRuntime().exec(cmd);

        //Read output
        BufferedReader dis = new BufferedReader( new InputStreamReader(child.getInputStream() ));

        while ((line = dis.readLine()) != null)
        {
            System.out.println("Line: " + line);
        }

        dis.close();

    }catch (IOException e){

    }

What am I doing wrong?

Any help would be very nice.

Thanks in advance,

Darryl


  1. You cannot run "dir" as a process, you need to change it to String cmd = "cmd dir";.
  2. You don't handle the exception at all. adding the line e.printStackTrace()); in the catch block would tell you what I wrote in (1). Never ignore exceptions!
  3. You don't handle error stream. This might cause your program to hang, handle error stream and read from both streams (error and input) in parallel using different streams.


The best way is to use commons exec http://commons.apache.org/exec/

This has things that catch quirks that can really drive you up the wall, such as the whole process blocking if you didn't clear its output stream, escaping quotes in commands, etc.

Here is a method that will run the del command in windows successfully. Note the use of cmd since del is not a standalone executable:

private void deleteWithCmd(File toDelete) throws IOException {
    CommandLine cmdLine = new CommandLine("cmd.exe");
    cmdLine.addArgument("/C");
    cmdLine.addArgument("del");
    cmdLine.addArgument(toDelete.getAbsolutePath());
    DefaultExecutor executor = new DefaultExecutor();
    int exitValue = executor.execute(cmdLine);
}


  • a) What is the java console?
  • b) You should use javas File.listFiles () instead of Runtime.exec, which isn't portable, and makes Name splitting neccessary - a hard thing, for filenames which contain spaces, blanks, newlines and so on.
  • c) Whats wrong with your code?
  • d) Why don't you do anything in the case of Exception?


Here is a more thorough example that accounts for OS versions and error conditions ( as stated by MByD above)

http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4

Remember that using "exec" means that your application is no longer cross-platform and loses one of the main advantages of Java.

A better approach is to use java.io package.

http://download.oracle.com/javase/tutorial/essential/io/dirs.html


You can also do something like that in java 6 :

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;

public class ListFilesFromRegExp {

    public static void main(String[] args) throws IOException {
        File dir = new File("files/");
        File[] files = dir.listFiles(new FilenameFilter() {
            public boolean accept(File dir, String name) {
                return name.matches("File[0-9].c");
            }
        });
        for (int i = 0; i < files.length; i++) {
            System.out.println(files[i].getAbsolutePath());
        }
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号