我试图决定是否使用ProcessBuilder或Commons exec,
我的要求是我只是想创建一个守护进程,其stdout/stdin/stderr我并不关心.另外,我希望在时机成熟时执行kill来销毁这个进程.
我在Linux上使用Java.
我知道两者都有他们的痛苦和陷阱(例如确保使用单独的线程吞下流可能导致阻塞或死锁,并关闭流,以免留下打开的文件)并想知道是否有人有建议方式或其他方式以及任何良好的资源.
我的目标是将emf,wmf文件格式转换为其他图像文件格式.
我包括image4java jar并尝试将我的emf文件转换为其他格式,如jpg,png ..使用以下代码:
import org.im4java.core.ConvertCmd;
import org.im4java.core.IMOperation;
import java.io.File;
public class im4java {
public static void main(String arg[])
{
File input=new File("src/image.emf");
File output=new File("src/output.jpg");
convertemf2png(input,output);
}
public static void convertemf2png(File input,File output)
{
try{
IMOperation img=new IMOperation();
img.addImage();
img.addImage();
ConvertCmd convert=new ConvertCmd();
convert.run(img,new Object[]{input,output});
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行它时,我得到了错误
当我使用时,convert.run(img,new Object[]{input,output});我得到了
java.lang.IllegalArgumentException: java.io.File is an unsupported image-type
at org.im4java.core.ImageCommand.resolveImages(ImageCommand.java:289)
at org.im4java.core.ImageCommand.prepareArguments(ImageCommand.java:189)
at org.im4java.core.ImageCommand.run(ImageCommand.java:208)
at im4java.convertemf2png(im4java.java:27)
at im4java.main(im4java.java:18)
Run Code Online (Sandbox Code Playgroud)当我使用时,`convert.run(img,new Object [] {input.getAbsolutePath(),output.getAbsolutePath()}); 我有, …
我知道Java可以使用File.length(), FileChannel.size()orRandomAccessFile.length()来获取文件的长度,但这相当于Linux的命令“ls”。但是,当我创建具有特定长度的文件时,如下所示:
RandomAccessFile randomAccessFile = new RandomAccessFile(filePath,"rw");
randomAccessFile.setLength(10485760);
Run Code Online (Sandbox Code Playgroud)
并使用“ls -l filePath”,我得到文件的长度是10485760,但使用“du filePath”只能得到0。
那么,如何使用Java获取文件实际使用的磁盘空间呢?