Popokoko
Popokoko

Reputation: 6543

Java: create temp file and replace with original

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();
    }

Upvotes: 4

Views: 21769

Answers (2)

jags
jags

Reputation: 176

    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}

Upvotes: 8

Nirmal- thInk beYond
Nirmal- thInk beYond

Reputation: 12054

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

Upvotes: 1

Related Questions