Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jar文件可以通过编程方式更新而不重写整个文件吗?_Java_Jar - Fatal编程技术网

Java Jar文件可以通过编程方式更新而不重写整个文件吗?

Java Jar文件可以通过编程方式更新而不重写整个文件吗?,java,jar,Java,Jar,可以使用JAR命令更新JAR文件中的单个文件,如下所示: jar uf TicTacToe.jar images/new.gif 有没有一种方法可以通过编程实现这一点 如果我使用JarOutputStream,我必须重写整个jar文件,所以我想知道是否有类似的“随机访问”方法来实现这一点。考虑到它可以使用jar工具来完成,我曾期望有一种类似的编程方式来完成它。可以使用Java 7中提供的工具仅更新jar文件的一部分: import java.net.URI; import java.nio.f

可以使用
JAR
命令更新JAR文件中的单个文件,如下所示:

jar uf TicTacToe.jar images/new.gif
有没有一种方法可以通过编程实现这一点


如果我使用
JarOutputStream
,我必须重写整个jar文件,所以我想知道是否有类似的“随机访问”方法来实现这一点。考虑到它可以使用
jar
工具来完成,我曾期望有一种类似的编程方式来完成它。

可以使用Java 7中提供的工具仅更新jar文件的一部分:

import java.net.URI;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.Map;

public class ZipFSPUser {
    public static void main(String [] args) throws Throwable {
        Map<String, String> env = new HashMap<>(); 
        env.put("create", "true");
        // locate file system by using the syntax 
        // defined in java.net.JarURLConnection
        URI uri = URI.create("jar:file:/codeSamples/zipfs/zipfstest.zip");

       try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) {
            Path externalTxtFile = Paths.get("/codeSamples/zipfs/SomeTextFile.txt");
            Path pathInZipfile = zipfs.getPath("/SomeTextFile.txt");          
            // copy a file into the zip file
            Files.copy( externalTxtFile,pathInZipfile, 
                    StandardCopyOption.REPLACE_EXISTING ); 
        } 
    }
}
导入java.net.URI;
导入java.nio.file.FileSystem;
导入java.nio.file.FileSystems;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.nio.file.StandardCopyOption;
导入java.util.HashMap;
导入java.util.Map;
公共类ZipFSPUser{
公共静态void main(字符串[]args)抛出可丢弃的{
Map env=new HashMap();
环境出售(“创建”、“真实”);
//使用语法定位文件系统
//在java.net.JarURLConnection中定义
URI=URI.create(“jar:file:/codeSamples/zipfs/zipfstest.zip”);
try(FileSystem-zipfs=FileSystems.newFileSystem(uri,env)){
Path externalTxtFile=Path.get(“/codeSamples/zipfs/SomeTextFile.txt”);
Path pathInZipfile=zipfs.getPath(“/SomeTextFile.txt”);
//将文件复制到zip文件中
复制(externalTxtFile、pathInZipfile、,
StandardCopyOption.REPLACE_现有);
} 
}
}

是的,如果您使用这个开源库,您也可以用这种方式修改它


我知道您可以在java中调用批处理过程。当您想更新jar时,可以尝试调用该命令。请查看API。@agad JarFile仅用于读取不幸的是:(.jar是一种存档格式,请尝试查找压缩/解压包的包在这种情况下,文件是按照ZIP算法进行压缩的,还是只是简单地添加到存档中?它是使用默认压缩级别进行压缩的。
public static void main(String args[]) throws IOException{
    File entry = new TFile("c:/tru6413/server/lib/nxps.jar/dir/second.txt");
    Writer writer = new TFileWriter(entry);
    try {
        writer.write(" this is writing into a file inside an archive");         
    } finally {
        writer.close();
    }       
}