Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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 IO复制文件_Java_Java Io - Fatal编程技术网

Java IO复制文件

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

我一直在尝试用java从一个内部位置获取一个文件到一个外部位置。文件正在复制,但未传输字节。文件最初为98字节,传输时设置为0。如果你能告诉我我做错了什么,或者以任何方式帮助我,那就太好了

    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);
            }
        }
    }
}