简体   繁体   中英

Java FileOutputStream Created file Not unlocking

Currently am facing a problem with FileOutputStream in my code used FileOutputStream for creating file in my disk .Once file created there is no way for opening , deleting or moving file from its location , getting error message already locked by other user When stopped web server it working properly .how can i solve this issue.

private void writeToFile(InputStream uploadedInputStream,
            String uploadedFileLocation) {

            try {
                OutputStream out = new FileOutputStream(new File(
                        uploadedFileLocation));
                int read = 0;
                byte[] bytes = new byte[1024];

                out = new FileOutputStream(new File(uploadedFileLocation));
                while ((read = uploadedInputStream.read(bytes)) != -1) {
                    out.write(bytes, 0, read);
                }
                out.flush();
                out.close();

            } catch (IOException e) {

                e.printStackTrace();
            }

        }

You are creating two instances of FileOutputStream and assigning both to out , but only closing one.

Remove the second out = new FileOutputStream(new File(uploadedFileLocation)); .

Also, you should consider using a try-with-resources block

private void writeToFile(InputStream uploadedInputStream,
    String uploadedFileLocation) {

    try (OutputStream out = new FileOutputStream(new File(uploadedFileLocation))) {
        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = uploadedInputStream.read(bytes)) != -1) {
            out.write(bytes, 0, read);
        }

    } catch (IOException e) {

        e.printStackTrace();
    }

}

or finally block to ensure that the streams are closed

private void writeToFile(InputStream uploadedInputStream,
    String uploadedFileLocation) {

    OutputStream out = null;
    try {
        out = new FileOutputStream(new File(uploadedFileLocation))
        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = uploadedInputStream.read(bytes)) != -1) {
            out.write(bytes, 0, read);
        }

    } catch (IOException e) {

        e.printStackTrace();
    } finally {
        if (out != null) {
            try {
                out.close();
            } catch (IOException exp) {            
            }
        }
    }

}

See The try-with-resources Statement for more details

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM