package org.rzo.yajsw.os.posix;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.concurrent.Callable;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import org.rzo.yajsw.util.DaemonThreadFactory;
public class Utils
{
protected static final Executor executor = Executors.newCachedThreadPool(new DaemonThreadFactory("util.osCommand"));
protected Logger _logger;
public void setLog(Logger logger)
{
_logger = logger;
}
public String readFile(String file)
{
String result = null;
File f = new File(file);
if (f.exists())
try
{
InputStream in = new FileInputStream(f);
byte[] buffer = new byte[10 * 1024];
int size = in.read(buffer);
// System.out.println("size "+size);
for (int i = 0; i < size; i++)
if (buffer[i] == 0)
buffer[i] = (byte) ' ';
result = new String(buffer);
in.close();
}
catch (Exception e)
{
if (_logger != null)
_logger.throwing(Utils.class.getName(), "readFile", e);
}
else
{
if (_logger != null)
_logger.info("could not find file " + f.getAbsolutePath());
// throw new NullPointerException();
}
return result;
}
public String osCommand(String cmd)
{
StringBuffer result = new StringBuffer();
try
{
Process p = Runtime.getRuntime().exec(cmd);
InputStream in = p.getInputStream();
int x;
while ((x = in.read()) != -1)
result.append((char) x);
}
catch (Exception ex)
{
if (_logger != null)
_logger.warning("Error executing \"" + cmd + "\": " + ex);
}
return result.toString();
}
public String osCommand(String cmd, long timeout)
{
Process p = null;
try
{
p = Runtime.getRuntime().exec(cmd);
final Process fp = p;
FutureTask<String> future = new FutureTask(new Callable()
{
public String call() throws Exception
{
StringBuffer result = new StringBuffer();
InputStream in = fp.getInputStream();
int x;
while ((x = in.read()) != -1)
result.append((char) x);
return result.toString();
}
});
executor.execute(future);
String result = future.get(timeout, TimeUnit.MILLISECONDS);
return result;
}
catch (Exception e)
{
if (_logger != null)
_logger.warning("Error executing \"" + cmd + "\": " + e);
if (p != null)
p.destroy();
}
return null;
}
public static void main(String[] args)
{
System.out.println(new Utils().osCommand("cmd /C dir", 500));
}
}