我正在使用commons压缩库来创建目录的tar.gz.我有一个目录结构如下.
parent/
child/
file1.raw
fileN.raw
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码进行压缩.它运行良好,没有例外.但是,当我尝试解压缩tar.gz时,我得到一个名为"childDirToCompress"的文件.它的大小正确,因此文件在tarring过程中显然已经相互附加.所需的输出将是一个目录.我无法弄清楚我做错了什么.任何有智慧的公共审判者都可以让我走上正确的道路吗?
CreateTarGZ() throws CompressorException, FileNotFoundException, ArchiveException, IOException {
File f = new File("parent");
File f2 = new File("parent/childDirToCompress");
File outFile = new File(f2.getAbsolutePath() + ".tar.gz");
if(!outFile.exists()){
outFile.createNewFile();
}
FileOutputStream fos = new FileOutputStream(outFile);
TarArchiveOutputStream taos = new TarArchiveOutputStream(new GZIPOutputStream(new BufferedOutputStream(fos)));
taos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR);
taos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
addFilesToCompression(taos, f2, ".");
taos.close();
}
private static void addFilesToCompression(TarArchiveOutputStream taos, File file, String dir) throws IOException{
taos.putArchiveEntry(new TarArchiveEntry(file, dir));
if (file.isFile()) {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
IOUtils.copy(bis, taos);
taos.closeArchiveEntry();
bis.close();
} …Run Code Online (Sandbox Code Playgroud) 在控制器中创建标准后,我不知道如何创建特定字段的运行总和
我正在使用以下方法创建一组记录:
def b = Tapes.createCriteria()
def yesterday = b.list(sort: 'migratedDate', order: 'asc') {
between ("migratedDate", dat.minus(1), dat)
}
Run Code Online (Sandbox Code Playgroud)
并计算该组中的项目数
def num2 = Tapes.countByMigratedDateBetween(dat.minus(1), dat)
Run Code Online (Sandbox Code Playgroud)
我的域中的一个字段是"migratedDuration",系统以毫秒为单位返回进程的运行时.在控制器中有一种方法可以创建这个数字的总和吗?或者我应该在相应的.gsp文件中通过javascript执行此操作吗?
再次感谢,
一个可怕的糟糕黑客
这非常有效,谢谢
def todayTime = aa.list() {
between ("migratedDate", dat.minus(4), dat.minus(3))
projections { sum('migratedDuration')
}
}
Run Code Online (Sandbox Code Playgroud) 作为sbt和sbt-assembly插件的新手我很困惑如何处理涉及我想要打包的依赖项中的不同类定义的构建.
[error] (*:assembly) deduplicate: different file contents found in the following:
[error] /Users/dm/.ivy2/cache/org.apache.tika/tika-app/jars/tika-app-1.3.jar:javax/xml/XMLConstants.class
[error] /Users/dm/.ivy2/cache/stax/stax-api/jars/stax-api-1.0.1.jar:javax/xml/XMLConstants.class
[error] /Users/dm/.ivy2/cache/xml-apis/xml-apis/jars/xml-apis-1.3.03.jar:javax/xml/XMLConstants.class
Run Code Online (Sandbox Code Playgroud)
我已经添加:
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
case PathList("javax", "xml", xs @ _*) => MergeStrategy.first
}
}
Run Code Online (Sandbox Code Playgroud)
到我的build.sbt文件,但我仍然得到上面的错误(无论它是否在构建文件中).任何指导将不胜感激.
谢谢,
唐
我试图弄清楚如何使用java获取二进制文件中的特定字节.我已经对字节级操作进行了大量阅读,并让自己彻底搞砸了.现在我可以遍历文件,如下面的代码所示,并告诉它停在我想要的字节.但是我知道这是吝啬的,并且有一种'正确'的方式来做到这一点.
所以例如,如果我有一个文件,我需要从off-set 000400返回字节,我怎么能从FileInputStream中获取它?
public ByteLab() throws FileNotFoundException, IOException {
String s = "/Volumes/Staging/Imaging_Workflow/B.Needs_Metadata/M1126/M1126-0001.001";
File file = new File(s);
FileInputStream in = new FileInputStream(file);
int read;
int count = 0;
while((read = in.read()) != -1){
System.out.println(Integer.toHexString(count) + ": " + Integer.toHexString(read) + "\t");
count++;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
java ×2
byte ×1
compression ×1
controller ×1
grails ×1
hibernate ×1
io ×1
plugins ×1
sbt ×1
sbt-assembly ×1
tar ×1