Lucene: "FileNotFoundException"

Posted on 2004-04-30
Last Modified: 2012-08-13
I'm using threads in which i'm searching an xml index and sometimes updating the index also.....

However, (probabaly on the occasions when the two threads(+) conincide) i get a "FileNotFoundException": the system cannot find the path specified...
or else an "IOException": couldn't delete _4.fl

So, i'm presuming that there is a conflict, whenever there may be an indexing and a search at the same time?

(By the way.....
I'm using Digester to parse & index the xml file
In my xmlParser class, i have a 'contacts' class (which holds all the properties or each contact entry which must be declared public and static for digester to instantiate it....)

How could i make sure these two errors never occur.......
Question by:vinoboy
  • 5
  • 3
LVL 30

Expert Comment

by:Mayank S
ID: 10958628
>> couldn't delete _4.fl

Do you also try to delete the files somewhere?

Author Comment

ID: 10958743
No, i didn't, but i presume that when its updating the index (ie, overwriting i think) that it deletes them itself
LVL 30

Expert Comment

by:Mayank S
ID: 10958771
Make sure that you synchronize your file-access properly. Ideally, when a file is being read by a thread, no other thread should write to it till that one closes it. Sameway, if a file is being written into by one thread, you should not let any other thread read from it till this one closes it.
Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.


Author Comment

ID: 10958800
And an easily implementable and reliable way to do the synchronisation of file access is?
LVL 30

Expert Comment

by:Mayank S
ID: 10958839
Perhaps you could use a common log-file. If a file is being written to, then the program would write its name to this file. Any other threads trying to access that file would wait till the file's entry is removed from that log-file (which will be done by the thread using it, after it is done with the file).

You could also carefully use synchronization between threads, but I don't have your code to help you with that.

Author Comment

ID: 10958887
I'll give the log file a shot....Its mere existance could tell me that the 'updating index' program is been used...
LVL 30

Expert Comment

by:Mayank S
ID: 10958918
Don't check only for existance. Let the log-file always be there. Let the existance of the working file-name in the log-file decide whether it is to be accessed or not. You can write a separate class for this log-file purpose.

Expert Comment

ID: 10959066
use locks to lock the file before you access it so that no other thread/process can change it

import java.nio.channels.*; //works on 1.4 only

FileLock lck = new FileOutputStream("C:\\File").getChannel().tryLock();
            if(lck == null)
      System.out.println("Another thread is already accesing the file....");

c:\\file can be the common file which is locked.if this file is not locked then a thread can do the required if it is locked then the thread has to wait.

LVL 30

Accepted Solution

Mayank S earned 100 total points
ID: 10959155
Ah, indeed~! Should've thought of that! Have been working on 1.3 a lot these days! You can see more on locks here:

Featured Post

Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How to convert String matching to regex in java 4 33
web application structure 18 77
Tomcat: Unable to run tomcat service. 2 18
Problem to Alipay 10 22
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question