1

We trying to get bytes from a file using below code.

getBytes("/home/1.ks");

Before that, we have make sure the file is exists.

public static void getBytes(final String resource) throws IOException {

        File file = new File(resource);
        if (file.exists()) {
            System.out.println("exists");
        } else {
            System.out.println("not exists");
        }

        final InputStream input = APIController.class.getResourceAsStream(resource);
        if (input == null) {
            throw new IOException(resource);
        } else {
            System.out.println("Not null");
        }
    }

Here the output and exceptions

exists
java.io.IOException: /home/1.ks
    at com.example.demo.controller.APIController.getBytes(APIController.java:164)
    at com.example.demo.controller.APIController.transactionSale(APIController.java:89)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
John Joe
  • 12,412
  • 16
  • 70
  • 135

1 Answers1

0

Change your line to :

final InputStream input = new FileInputStream(resource);

While you're at it, change the name of the parameter resource to path or filePath, since that is what it really is.

The two concepts (file and resource) are related but not the same. A resource can be a file on disk, but it can also be a file inside a jar file or it could be a resource loaded from a remote URL (not often used, but possible).

Since in your case, you know that you want to access a file on disk, you need to use FileInputStream.

See also What's the difference between a Resource, URI, URL, Path and File in Java? for a deeper explanation of the differences between files, resources and related concepts.

Erwin Bolwidt
  • 30,799
  • 15
  • 56
  • 79