Prvi problem na koji sam naišao je da mi eclipse (Helios - instalirao sam stariju verziju zbog dodatka za android) nije prepoznavao try with resource statement kao što je u rešenju na http://download.oracle.com/jav...ssential/io/QandE/FindInt.java tj. prijavljivao expected { found (... Pretpostavio sam da je to zato što je Eclipse malo stariji ne razume Try with resources koji je valda novi u 1.7, pa sam na silu pokrenuo - izabrao proceed u Eclipse i java mi je prijavila istu grešku...
1. Prvo pitanje - Šta je pogrešno sa try with resources na http://download.oracle.com/jav...ssential/io/QandE/FindInt.java ? Devinitivno imam java JDK 1.7 instaliranu i podešenu u Eclipse jer sam bez problema radio već sa nekim klasama java.nio paketa koji je novi u javi 1.7...
Posle toga sam odlučio da odustanem od try with resources i riješim na stari način - preko finally bloka - kao u kopiranom kodu (ime klase ne odgovara problemu jer nisam htio praviti novi projekat samo za ovaj zadačić) - i sad mi u finally bloku prijavljuje grešku da mi je promjenljiva fc nedefinisana (a definisana je u try bloku)? Ne razimijem? Zar nije poenta finally bloka da počisti poslije try bloka i onda mi je logično da sve što je definisano u try - pa makar tu bilo i lokalno da je definisano i u finally?
2. Šta je problem sa mojom nedefinisanom fc promjenljivom u finally bloku? Ako ne mogu koristiti lokalne promjenljive iz try bloka - kako onda drugačije da zatvorim fc preko finally bloka?
Napomena - uspio sam pokrenuti program kada sam ovaj blok iz finally pomjerio u try (nisam mogao kopirati ni u catch blok jer mi je prijavljivao isti problem)...
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.*;
import java.nio.channels.SeekableByteChannel;
import java.nio.file.*;
class CountLetters {
private Path file;
CountLetters (Path file)
{
this.file = file;
}
public int seek() throws IOException
{
int lookingFor = -1;
try
{
SeekableByteChannel fc = Files.newByteChannel(file);
ByteBuffer buf = ByteBuffer.allocate(8);
//Get the offset into the file.
fc.read(buf);
long offset = buf.getLong(0);
//Seek to the offset location.
fc.position(offset);
buf.rewind();
//Read the 'secret' value.
fc.read(buf);
lookingFor = buf.getInt(0);
}
catch (IOException x)
{
System.err.println(x);
}
finally
{
if (fc != null)
fc.close();
}
return lookingFor;
}
public static void main(String[] args) throws IOException
{
Path file = Paths.get("datafile");
int lookingFor = new CountLetters(file).seek();
System.out.println("The value is " + lookingFor);
}
}