java io 读取 META-INF 文件夹出错,何解?

yang3wei 2012-09-11 10:52:26
	public static void main(String[] args) throws IOException {
File f = new File("/Users/user/Desktop/META-INF");
if(f.exists()) {
System.out.println("Test~");
InputStream is = new FileInputStream(f);
}
}

/Users/user/Desktop/META-INF 这个目录是存在的, META-INF 是一个目录!
报错:
Test~
Exception in thread "main" java.io.FileNotFoundException: /Users/user/Desktop/META-INF (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at org.bruce.vertices.asist.utils.ZipUtil.main(ZipUtil.java:247)
...全文
579 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang3wei 2012-09-12
  • 打赏
  • 举报
回复
所以说, /Users/user/Desktop/META-INF/test.txt 就是绝对路径了
yang3wei 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

File f = new File("/Users/user/Desktop/META-INF/test.txt");你确定你写的路径正确?Users前面是什么目录,加个“.”试试
[/Quote]
...我用的 mac 系统,mac 系统只有一个根目录,那就是 /
yyw6637 2012-09-12
  • 打赏
  • 举报
回复
File f = new File("/Users/user/Desktop/META-INF/test.txt");你确定你写的路径正确?Users前面是什么目录,加个“.”试试
yang3wei 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

File类中的构造放方法既可以是文件也可以是目录啊
exists()是判断是否存在文件或者目录
[/Quote]
呵呵,其实在问这个问题这前我就对这点儿有些怀疑了。
我现在的需求是将一个由 jar 包(实际上就是 zip 压缩包)解压出来的文件夹,再以 java 的方式将该文件夹压缩成 jar 包。
问题便是在这个过程中出现的,
我粘贴一点儿代码吧,功用如前所述,
	/**
* @param dir
*/
public static void zipFile(File dir) {
String pathDir = dir.getAbsolutePath();

List<String> pathList = new LinkedList<String>();
Functions.listFilesAndDirs(pathDir, pathList);

String pathNewJar = pathDir + ".jar";
File fileNewJar = new File(pathNewJar);

JarOutputStream jos = null;
try {
FileOutputStream fos = new FileOutputStream(fileNewJar);
jos = new JarOutputStream(fos);

for(String pathItem : pathList) {
// jar 中的每一个文件夹 每一个文件 都是一个 jarEntry
String entryPath = pathItem.replace(pathDir + File.separator, "");
JarEntry newEntry = new JarEntry(entryPath);

// 表示将该 entry 写入 jar 文件中 也就是创建该文件夹和文件~
jos.putNextEntry(newEntry);

/**
* Added by Bruce Yang on 2012.09.11.15.37~
* 对于文件夹,是不能获取他的 FileInputStream 的,蛋疼~
*/
File fileItem = new File(pathItem);
if(fileItem.isFile()) {
InputStream is = new FileInputStream(fileItem);
byte[] bytes = Functions.inputStream2byteArray(is);
is.close();

// 然后就是往entry中的jj.txt文件中写入内容
jos.write(bytes);
}
}
// 最后不能忘记关闭流
jos.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}

这个是我之前的代码,当为目录的时候,我判断了一下不给获取流
但是我发现打出来的 jar 包,执行以下是损坏的
yang3wei 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

大哥,File里面是文件不是文件目录, File f = new File("/Users/user/Desktop/META-INF/test.txt");试试
[/Quote]
呵呵,其实在问这个问题这前我就对这点儿有些怀疑了。
我现在的需求是将一个由 jar 包(实际上就是 zip 压缩包)解压出来的文件夹,再以 java 的方式将该文件夹压缩成 jar 包。
问题便是在这个过程中出现的,
我粘贴一点儿代码吧,功用如前所述,
	/**
* @param dir
*/
public static void zipFile(File dir) {
String pathDir = dir.getAbsolutePath();

List<String> pathList = new LinkedList<String>();
Functions.listFilesAndDirs(pathDir, pathList);

String pathNewJar = pathDir + ".jar";
File fileNewJar = new File(pathNewJar);

JarOutputStream jos = null;
try {
FileOutputStream fos = new FileOutputStream(fileNewJar);
jos = new JarOutputStream(fos);

for(String pathItem : pathList) {
// jar 中的每一个文件夹 每一个文件 都是一个 jarEntry
String entryPath = pathItem.replace(pathDir + File.separator, "");
JarEntry newEntry = new JarEntry(entryPath);

// 表示将该 entry 写入 jar 文件中 也就是创建该文件夹和文件~
jos.putNextEntry(newEntry);

/**
* Added by Bruce Yang on 2012.09.11.15.37~
* 对于文件夹,是不能获取他的 FileInputStream 的,蛋疼~
*/
File fileItem = new File(pathItem);
if(fileItem.isFile()) {
InputStream is = new FileInputStream(fileItem);
byte[] bytes = Functions.inputStream2byteArray(is);
is.close();

// 然后就是往entry中的jj.txt文件中写入内容
jos.write(bytes);
}
}
// 最后不能忘记关闭流
jos.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}

这个是我之前的代码,当为目录的时候,我判断了一下不给获取流
但是我发现打出来的 jar 包,执行以下是损坏的
yang3wei 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

大哥,File里面是文件不是文件目录, File f = new File("/Users/user/Desktop/META-INF/test.txt");试试
[/Quote]
呵呵,其实在问这个问题这前我就对这点儿有些怀疑了。
我现在的需求是将一个由 jar 包(实际上就是 zip 压缩包)解压出来的文件夹,再以 java 的方式将该文件夹压缩成 jar 包。
问题便是在这个过程中出现的,
我粘贴一点儿代码吧,功用如前所述,
	/**
* @param dir
*/
public static void zipFile(File dir) {
String pathDir = dir.getAbsolutePath();

List<String> pathList = new LinkedList<String>();
Functions.listFilesAndDirs(pathDir, pathList);

String pathNewJar = pathDir + ".jar";
File fileNewJar = new File(pathNewJar);

JarOutputStream jos = null;
try {
FileOutputStream fos = new FileOutputStream(fileNewJar);
jos = new JarOutputStream(fos);

for(String pathItem : pathList) {
// jar 中的每一个文件夹 每一个文件 都是一个 jarEntry
String entryPath = pathItem.replace(pathDir + File.separator, "");
JarEntry newEntry = new JarEntry(entryPath);

// 表示将该 entry 写入 jar 文件中 也就是创建该文件夹和文件~
jos.putNextEntry(newEntry);

/**
* Added by Bruce Yang on 2012.09.11.15.37~
* 对于文件夹,是不能获取他的 FileInputStream 的,蛋疼~
*/
File fileItem = new File(pathItem);
if(fileItem.isFile()) {
InputStream is = new FileInputStream(fileItem);
byte[] bytes = Functions.inputStream2byteArray(is);
is.close();

// 然后就是往entry中的jj.txt文件中写入内容
jos.write(bytes);
}
}
// 最后不能忘记关闭流
jos.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}

这个是我之前的代码,当为目录的时候,我判断了一下不给获取流
但是我发现打出来的 jar 包,执行以下是损坏的
aikaibo 2012-09-12
  • 打赏
  • 举报
回复
File类中的构造放方法既可以是文件也可以是目录啊
exists()是判断是否存在文件或者目录
aikaibo 2012-09-12
  • 打赏
  • 举报
回复
File类中的构造放方法既可以是文件也可以是目录啊
exists()是判断是否存在文件或者目录
yyw6637 2012-09-12
  • 打赏
  • 举报
回复
大哥,File里面是文件不是文件目录, File f = new File("/Users/user/Desktop/META-INF/test.txt");试试
赏金--猎人 2012-09-12
  • 打赏
  • 举报
回复
我记得 File里面应该是 文件的路径吧,你读取META-INF 干嘛呀,里面没有文件吗? 你把文件名加在META-INF后面不就行了吗
xpingping 2012-09-11
  • 打赏
  • 举报
回复
FileInputStream这个是处理File 的类,目录肯定不行。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧