Java IO复制文件
我一直在尝试用java从一个内部位置获取一个文件到一个外部位置。文件正在复制,但未传输字节。文件最初为98字节,传输时设置为0。如果你能告诉我我做错了什么,或者以任何方式帮助我,那就太好了Java IO复制文件,java,java-io,Java,Java Io,我一直在尝试用java从一个内部位置获取一个文件到一个外部位置。文件正在复制,但未传输字节。文件最初为98字节,传输时设置为0。如果你能告诉我我做错了什么,或者以任何方式帮助我,那就太好了 private static void copyFile(String internal, File external) { InputStream stream = FileManager.class.getResourceAsStream(internal); if(stream
private static void copyFile(String internal, File external) {
InputStream stream = FileManager.class.getResourceAsStream(internal);
if(stream == null) {
System.err.println("Error: File not found when trying to copy at location " + internal);
}
OutputStream resStreamOut = null;
int readBytes;
byte[] buffer = new byte[4096];
try {
resStreamOut = new FileOutputStream(external);
while((readBytes = stream.read(buffer)) > 0) {
resStreamOut.write(buffer, 0 , readBytes);
}
} catch(IOException e1) {
e1.printStackTrace();
System.exit(1);
} finally {
try {
stream.close();
resStreamOut.close();
} catch(IOException e2) {
e2.printStackTrace();
System.exit(1);
}
}
}
编辑:
获取空指针:
4.4.0 Error: File not found when trying to copy at location /res/shaders/basicFragment.fs
Exception in thread "main" java.lang.NullPointerException at
com.thinmatrix.konilax.handlers.FileManager.copyFile(FileManager.java:80) at
com.thinmatrix.konilax.handlers.FileManager.update(FileManager.java:56) at
com.thinmatrix.konilax.MainComponent.<init>(MainComponent.java:22) at
com.thinmatrix.konilax.MainComponent.main(MainComponent.java:115)
4.4.0错误:尝试在/res/shaders/basicFragment.fs位置复制时未找到文件
线程“main”java.lang.NullPointerException中的异常位于
com.thinmarix.konilax.handlers.FileManager.copyFile(FileManager.java:80)位于
com.thinmarix.konilax.handlers.FileManager.update(FileManager.java:56)位于
MainComponent.(MainComponent.java:22)位于
MainComponent.main(MainComponent.java:115)
仅当代码成功打开文件时才读取该文件(在测试流是否为空时请注意else语句):
这应该行得通。您确定输入正确吗?然后你就不会破坏输出了?我会在循环中每次跟踪“readBytes”,以确保您真正到达这里。您确定您使用
FileManager
正确读取输入吗?我几乎肯定我正确使用FileManager已经有一段时间没有使用java的io了。如果您想检查的话,这里是整个类@user3051391您有一个很小的逻辑错误。请参阅评论和答案。感谢您的精彩回答,但现在它找不到文件,也没有stacktrace出来和线索why@user3051391“internal”应该是与FileManager
类(可以在JAR中分解或压缩)位于同一目录中的文件名(无路径),或者相对于类路径上的目录以“/”开头的路径。
private static void copyFile(String internal, File external) {
InputStream stream = FileManager.class.getResourceAsStream(internal);
if(stream == null) {
System.err.println("Error: File not found when trying to copy at location " + internal);
} else {
OutputStream resStreamOut = null;
int readBytes;
byte[] buffer = new byte[4096];
try {
resStreamOut = new FileOutputStream(external);
while((readBytes = stream.read(buffer)) > 0) {
resStreamOut.write(buffer, 0 , readBytes);
}
} catch(IOException e1) {
e1.printStackTrace();
System.exit(1);
} finally {
try {
stream.close();
resStreamOut.close();
} catch(IOException e2) {
e2.printStackTrace();
System.exit(1);
}
}
}
}