OutputStream out= new FileOutputStream("D://info.txt");
out.write(new String("hello").getBytes());在eclipse中能够向info.txt文件中写入数据,打包成jar文件后无法写入数据?????
out.write(new String("hello").getBytes());在eclipse中能够向info.txt文件中写入数据,打包成jar文件后无法写入数据?????
JarOutputStream
public class Util_Jar_Test { Logger log = Logger.getLogger(this.getClass());
//复制jar
public void copyJar(File src , File des) throws FileNotFoundException, IOException{
JarInputStream jarIn = new JarInputStream(new BufferedInputStream(new FileInputStream(src)));
Manifest manifest = jarIn.getManifest();
JarOutputStream jarOut = null;
if(manifest == null){
jarOut = new JarOutputStream(new BufferedOutputStream(new FileOutputStream(des)));
}else{
jarOut = new JarOutputStream(new BufferedOutputStream(new FileOutputStream(des)),manifest);
}
byte[] bytes = new byte[1024];
while(true){
//重点
ZipEntry entry = jarIn.getNextJarEntry();
if(entry == null)break;
jarOut.putNextEntry(entry);
int len = jarIn.read(bytes, 0, bytes.length);
while(len != -1){
jarOut.write(bytes, 0, len);
len = jarIn.read(bytes, 0, bytes.length);
}
log.info("Copyed: " + entry.getName());
// jarIn.closeEntry();
// jarOut.closeEntry();
String a = new String();
a.length();
}
jarIn.close();
jarOut.finish();
jarOut.close();
}
//解压jar
public void unJar(File src , File desDir) throws FileNotFoundException, IOException{
JarInputStream jarIn = new JarInputStream(new BufferedInputStream(new FileInputStream(src)));
if(!desDir.exists())desDir.mkdirs();
byte[] bytes = new byte[1024];
while(true){
ZipEntry entry = jarIn.getNextJarEntry();
if(entry == null)break;
File desTemp = new File(desDir.getAbsoluteFile() + File.separator + entry.getName());
if(entry.isDirectory()){ //jar条目是空目录
if(!desTemp.exists())desTemp.mkdirs();
log.info("MakeDir: " + entry.getName());
}else{ //jar条目是文件
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(desTemp));
int len = jarIn.read(bytes, 0, bytes.length);
while(len != -1){
out.write(bytes, 0, len);
len = jarIn.read(bytes, 0, bytes.length);
}
out.flush();
out.close();
log.info("Copyed: " + entry.getName());
}
jarIn.closeEntry();
}
//解压Manifest文件
Manifest manifest = jarIn.getManifest();
if(manifest != null){
File manifestFile = new File(desDir.getAbsoluteFile()+File.separator+JarFile.MANIFEST_NAME);
if(!manifestFile.getParentFile().exists())manifestFile.getParentFile().mkdirs();
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(manifestFile));
manifest.write(out);
out.close();
}
//关闭JarInputStream
jarIn.close();
}
//复制jar by JarFile
public void copyJarByJarFile(File src , File des) throws IOException{
//重点
JarFile jarFile = new JarFile(src);
Enumeration<JarEntry> jarEntrys = jarFile.entries();
JarOutputStream jarOut = new JarOutputStream(new BufferedOutputStream(new FileOutputStream(des)));
byte[] bytes = new byte[1024];
while(jarEntrys.hasMoreElements()){
JarEntry entryTemp = jarEntrys.nextElement();
jarOut.putNextEntry(entryTemp);
BufferedInputStream in = new BufferedInputStream(jarFile.getInputStream(entryTemp));
int len = in.read(bytes, 0, bytes.length);
while(len != -1){
jarOut.write(bytes, 0, len);
len = in.read(bytes, 0, bytes.length);
}
in.close();
jarOut.closeEntry();
log.info("Copyed: " + entryTemp.getName());
}
jarOut.finish();
jarOut.close();
jarFile.close();
}
//解压jar文件by JarFile
public void unJarByJarFile(File src , File desDir) throws FileNotFoundException, IOException{
JarFile jarFile = new JarFile(src);
Enumeration<JarEntry> jarEntrys = jarFile.entries();
if(!desDir.exists())desDir.mkdirs(); //建立用户指定存放的目录
byte[] bytes = new byte[1024];
while(jarEntrys.hasMoreElements()){
ZipEntry entryTemp = jarEntrys.nextElement();
File desTemp = new File(desDir.getAbsoluteFile() + File.separator + entryTemp.getName());
if(entryTemp.isDirectory()){ //jar条目是空目录
if(!desTemp.exists())desTemp.mkdirs();
log.info("makeDir" + entryTemp.getName());
}else{ //jar条目是文件
//因为manifest的Entry是"META-INF/MANIFEST.MF",写出会报"FileNotFoundException"
File desTempParent = desTemp.getParentFile();
if(!desTempParent.exists())desTempParent.mkdirs();
BufferedInputStream in = new BufferedInputStream(jarFile.getInputStream(entryTemp));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(desTemp));
int len = in.read(bytes, 0, bytes.length);
while(len != -1){
out.write(bytes, 0, len);
len = in.read(bytes, 0, bytes.length);
}
in.close();
out.flush();
out.close();
log.info("Copyed: " + entryTemp.getName());
}
}
jarFile.close();
}
参照:http://www.cnblogs.com/mailingfeng/archive/2011/07/30/2122160.html
如果你把Jar包放applet中用,或放tomcat中去调用,记得修改policy文件,将该目录的IO权限赋予你的程序。Tomcat下是catalina.policy文件。
OutputStream out= new FileOutputStream("D://info.txt");
out.write(new String("hello").getBytes());两条语句之前我写的是生成窗口的代码,能够成功生成窗口,只是运行jar文件不能向info.txt中写入数据。不知道你是否能明白我的意思???
OutputStream out= new FileOutputStream("D://info.txt");
out.write(new String("hello").getBytes());两条语句之前我写的是生成窗口的代码,能够成功生成窗口,只是运行jar文件不能向info.txt中写入数据。不知道你是否能明白我的意思???
1.最可能是输出流没有关闭,没有执行out.close() ,所以写入的数据没有真正输出到文件 你加上out.close();这一行试试2.写入数据之前,有异常抛出,这两行代码没有执行
应该为OutputStream out= new FileOutputStream("D:/info.txt");
注意最后要关闭
可以out.flush();下
但这依然不能解释Eclipse中为什么可以运行出结果。
贴完整代码吧。