Knowing when a file writting has ended

Hi,

I am writting to a file, from a java application.
The file is big so multiple flush will occur during the writting. That file will be used by another application(Cold Fusion), that will read it and do it's job. What I need is a way of letting the ColdFusion alllication know that the writting to the file has finished and the file is ready for use.
I know I could read the file from ColdFusion and check for something at the end that will tell me the file is OK, but the file is big. I am looking for some suggestions.
Thanks.
simiAsked:
Who is Participating?
 
Dain_AndersonConnect With a Mentor Commented:
Here is a very simple technique to see if the file is in use. By trying to rename the file, you will get an error since the file is being written to, at which point it is read-only.

So, in ColdFusion, use:

<CFTRY>
    <CFFILE ACTION="Rename"
        SOURCE="d:\myFile1.txt"
        DESTINATION="d:\myFile2.txt">
    <CFFILE ACTION="Rename"
        SOURCE="d:\myFile2.txt"
        DESTINATION="d:\myFile1.txt">
    <CFCATCH TYPE="Any">
        <CFOUTPUT>#CFCATCH.detail#</CFOUTPUT>
        File is in use -- try again later.
    </CFCATCH>
</CFTRY>

This takes exactly 4 milliseconds to process, so you can see it's quite efficient.

Hope that helps
0
 
adam923Commented:
how about creating a second file as a "flag" to coldfusion?
so at the end of your large file write activity you could just write another tiny file... meanwhile coldfusion could wait in a loop until that "flag" file exists
0
 
simiAuthor Commented:
That's one of the solutions I had in mind, together with another one that is, reading the date when the big file is created, then loop reading the date untill it changed(I have tested writting the file from a java application and the date is changed only when I close the stream to the file. Flushing the buffer does not change the date, even if it does write to the file.
Sorry, I should have posted all that from the begining.
So what I am looking for is if someone has some other solution that would work better, or if someone can see some problems with the ones I have allready presented.
Thanks.
0
Cloud Class® Course: CompTIA Healthcare IT Tech

This course will help prep you to earn the CompTIA Healthcare IT Technician certification showing that you have the knowledge and skills needed to succeed in installing, managing, and troubleshooting IT systems in medical and clinical settings.

 
adam923Commented:
what don't you like about that solution?  
i don't know what kind of support for sockets cold fusion has but you could open a socket between the two apps to communicate
files and sockets are the most common ways of communicating between processes... although i'm sure there are others as well
0
 
simiAuthor Commented:
Is not something that I particulary don't like, but more that the project manager was suggesting of a more elegant solution, and I wanted to see if there are any ideeas.

I can't use sockets now, it'll have to be a file that I read.
Thanks anyway.
0
 
Jim CakalicSenior Developer/ArchitectCommented:
What is the relationship between the ColdFusion application and the Java application?

If the ColdFusion app is the parent of the Java app and it tells its child process the name of the file to write, perhaps you could do something like write to a temporary filename from the Java app and then rename to the agreed upon final file when done. The ColdFusion app could wait until the name file appears at which point it would be complete. The hole in this is, what to do if something catastrophic occurs to the Java app and the file never appears? Can the ColdFusion app know when its child terminates? Using this indication along with or instead of the temporary file scheme could round out the solution.

Best regards,
Jim Cakalic
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.