Hi James:
Turns out its a bug when there are no variables in the file. Ill make a fix as
soon as i can (probably tommorrow or day after).
BTW, im sorry to say going in and out of define mode is not very robust in
netcdf-java. Id use it as minimally as possible, or at least be sure to test
things are working correctly. Also its quite inefficient, as it forces a
complete file rewrite in many cases.
Thanks for reporting the bug.
John
James.Dempsey@xxxxxxxx wrote:
Hi,
I am using the current 4.1 netcdf-java library (4.1.20100311.2157 or
change 14 I believe) and encountering a problem when trying to use
redefine mode. A similar problem also occurs using the latest 4.0 library.
Our aim is to create some command line tools that allow a netCDF file to
be build up. First, define a dimension, then add a variable to it, then
populate the variable. However when we close and reopen the file, any
attempt to add a variable results in the following stack trace:
Exception in thread "main" _java.io.IOException_: The parameter is incorrect
at java.io.RandomAccessFile.setLength(_Native Method_)
at ucar.unidata.io.RandomAccessFile.close(_RandomAccessFile.java:339_)
at ucar.nc2.iosp.netcdf3.N3iosp.close(_N3iosp.java:878_)
at ucar.nc2.NetcdfFileWriteable.close(_NetcdfFileWriteable.java:769_)
at au.csiro.netcdf.CreateFile.main(_CreateFile.java:45_)
The following code demonstrates the problem.
package au.csiro.netcdf;
import java.io.IOException;
import ucar.ma2.DataType;
import ucar.nc2.Dimension;
import ucar.nc2.NetcdfFileWriteable;
public class CreateFile {
private static String dimensionName = "lat";
private static int dimensionSize = 20;
private static String variableName = "temp";
private static DataType variableDataType = DataType.getType("Float");
public static void main(String[] args) throws IOException {
String outputFilename = args[0];
NetcdfFileWriteable ncFile =
NetcdfFileWriteable.createNew(outputFilename, true);
try {
Dimension dimension = new Dimension(dimensionName,
dimensionSize, true /* isShared */,
false /* isUnlimited */, false /* isVariableLength */);
ncFile.addDimension(null, dimension);
ncFile.create();
} finally {
ncFile.close();
}
ncFile = NetcdfFileWriteable.openExisting(outputFilename, true);
try {
ncFile.setRedefineMode(true);
ncFile.addVariable(variableName, variableDataType,
dimensionName);
ncFile.setRedefineMode(false);
} finally {
ncFile.close();
}
}
}
If the ncFile.close() and NetcdfFileWriteable.openExisting calls are
commented out the file is successfully created with the variable. Could
anyone advise if this is something I am doing wrong or a problem with
the library please?
Cheers,
James Dempsey
Java Technical Lead | Software Services
Information Management and Technology
CSIRO Australia
------------------------------------------------------------------------
_______________________________________________
netcdf-java mailing list
netcdf-java@xxxxxxxxxxxxxxxx
For list information or to unsubscribe, visit: http://www.unidata.ucar.edu/mailing_lists/