Showing posts with label java. Show all posts
Showing posts with label java. Show all posts

Monday, 27 July 2009

Write Matlab files without Matlab via Java and JMatIO

I had to interface a shiny new analytical suite built on KNIME with some legacy applications in Matlab we are unfortunately still using. This demanded exporting tables into Matlab's proprietary data format from Java.

I used the JMatIO library and everything worked like a charm. The following code snippet (taken from here) best illustrates the use of the library:

//1. First create example arrays
double[] src = new double[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
MLDouble mlDouble = new MLDouble( "double_arr", src, 3 );
MLChar mlChar = new MLChar( "char_arr", "I am dummy" );

//2. write arrays to file
ArrayList list = new ArrayList();
list.add( mlDouble );
list.add( mlChar );

new MatFileWriter( "mat_file.mat", list );

This is equivalent to the following Matlab code:

double_arr = [ 1 2; 3 4; 5 6];
char_arr = 'I am dummy';
save('mat_file.mat', 'double_arr', 'char_arr');

Neat, isn't it?

Friday, 24 July 2009

Adding external Java libraries to new KNIME plugins

Sorry, it is a blunt copy-paste plagiarism, but I needed to keep it written somewhere. Here it goes:

In order to add external jars to new KNIME plugins you need to: 

  1. Create a lib directory in your KNIME plugin.
  2. Copy the file(s) into the lib directory. (Java libraries are packed either as a zip or jar archive.)
  3. Edit the META-INF/MANIFEST.MF file with the "Plug-in Manifest Editor".
  4. Go to the "Runtime" tab and add all necessary libraries to the "Classpath" list on the bottom-right corner using the "Add..." button.
  5. Go the to "Build" tab and add the files to the list contained in the section "Extra classpath entries".
  6. Make sure that the lib directory is selected in both the "Binary Build" and "Source Build" list (in the same tab).

Finally note that adding jar files to the plugins build path, i.e. project context menu -> "Java Build Path" ->"Libraries" is not necessary.