# Standalone API Usage

This section describes the basic structure of a standalone application using the API. See the source referenced in Example Programs. Typically, your application takes the following actions:

1. Load the EDK library.

   Copy

       System.loadLibrary("edkjni");

2. Create an `EDKFactory` instance of a `TextExtractionFactory`, supplying a valid license key.

   Copy

       try ( TextExtractionFactory<EDKMatch> factory = EDKFactory.fromLicenseKey("...") ) {
           // use try-with-resources to automatically cleanup factory once finished or if an exception occurs
           // rest of the processing code goes here ...
       }

3. Use the factory to create an instance of a `TextExtractionEngine`.

   Copy

       try ( TextExtractionEngine<EDKMatch> engine = factory.createEngineFromConfigFile(Paths.get("path", "to", "config.cfg")) ) {
           // use try-with-resources to automatically cleanup engine once finished or if an exception occurs
           // rest of the processing code goes here ...
       }

   You can specify the options, grammar files, and entities to use in the configuration file. Alternatively the SDK provides functions for setting options programmatically (see the `FromSettings.java` example).

4. Decide whether to push data to the engine when it becomes available, or have the engine read from a stream when it needs more data. The data must be UTF-8 encoded. The following example demonstrates how to read from a stream. The stream is passed to an `EDKJNIInputStream` object which reads the stream when required.

   Copy

       try ( FileInputStream in = new FileInputStream("input.txt") ) {
           ReadableInputStream stream = new EDKJNIInputStream(in);
           // ...
       }

   Pass the `EDKJNIInputStream` to a `TextExtractionSession` object, which maintains the state of the matching process. If your application is multi-threaded then each thread should use its own `TextExtractionSession`.

   Copy

       try ( TextExtractionSession<EDKMatch> session = engine.createSession() ) {
           session.setInputStream(stream);
           // ...
       }

5. Begin matching.

   Copy

       for (EDKMatch match : session) {
           System.out.println(match.getText());
       }

   NOTE: If you create your Eduction engine from a configuration file that includes post-processing tasks, the post-processing tasks automatically run as part of `EDKMatch` and you do not need to run them separately.

6. Release resources when done.

_FT_HTML5_bannerTitle.htm