Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java: create temp file and replace with original

Tags:

java

file

i need some help with creating file

Im trying in the last hours to work with RandomAccessFile and try to achieve the next logic:

  1. getting a file object
  2. creating a temporary file with similar name (how do i make sure the temp file will be created in same place as the given original one?)
  3. write to this file
  4. replace the original file on the disk with the temporary one (should be in original filename).

I look for a simple code who does that preferring with RandomAccessFile I just don't how to solve these few steps right..

edited: Okay so ive attachted this part of code my problem is that i can't understand what should be the right steps.. the file isn't being created and i don't know how to do that "switch"

        File tempFile = null;
    String[] fileArray = null;
    RandomAccessFile rafTemp = null;
    try {
        fileArray = FileTools.splitFileNameAndExtension(this.file);
        tempFile = File.createTempFile(fileArray[0], "." + fileArray[1],
                this.file); // also tried in the 3rd parameter this.file.getParentFile() still not working.
        rafTemp = new RandomAccessFile(tempFile, "rw");
        rafTemp.writeBytes("temp file content");
        tempFile.renameTo(this.file);
    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        rafTemp.close();
    }
like image 619
Popokoko Avatar asked Sep 19 '25 15:09

Popokoko


2 Answers

    try {
  // Create temp file.
  File temp = File.createTempFile("TempFileName", ".tmp", new File("/"));
  // Delete temp file when program exits.
  temp.deleteOnExit();
  // Write to temp file
  BufferedWriter out = new BufferedWriter(new FileWriter(temp));
  out.write("Some temp file content");
  out.close();
  // Original file
  File orig = new File("/orig.txt");
  // Copy the contents from temp to original file  
  FileChannel src = new FileInputStream(temp).getChannel();
  FileChannel dest = new FileOutputStream(orig).getChannel();
  dest.transferFrom(src, 0, src.size());

  } catch (IOException e) { // Handle exceptions here}
like image 172
jags Avatar answered Sep 22 '25 05:09

jags


you can direct overwrite file. or do following

  1. create file in same directory with diff name

  2. delete old file

  3. rename new file

like image 30
Nirmal- thInk beYond Avatar answered Sep 22 '25 05:09

Nirmal- thInk beYond