The next function in the java program is written with the intention of reading from a file and overwriting back to the same file after.
public static void readOverWrite(File dir) throws IOException { for (File f : dir.listFiles()) { String[] data = readFile(f).split("\n"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(f))) { for (int i = 0; i < data.length; i++) { writer.write((data[i]+"\n")); } writer.close(); } } }
Error message when trying to start the program:
Exception in thread "main" java.io.FileNotFoundException: ..\..\data\AQtxt\APW19980807.0261.tml (The requested operation cannot be performed on a file with a user-mapped section open) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(Unknown Source) at java.io.FileOutputStream.<init>(Unknown Source) at java.io.FileWriter.<init>(Unknown Source) at General.SplitCreationDate.splitLine(SplitCreationDate.java:37) at General.SplitCreationDate.main(SplitCreationDate.java:53)
Request help resolving the error.
Code for readFile
protected static String readFile(File fullPath) throws IOException { try(FileInputStream stream = new FileInputStream(fullPath)) { FileChannel fc = stream.getChannel(); MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); stream.close(); return Charset.defaultCharset().decode(bb).toString(); } }
Read in another thread that this is a windows problem, and therefore the MappedByteBuffer in the readFile method caused the problem. Rewrote the readFile method as shown below. He works!
protected static String readFile(File fullPath) throws IOException { String string = ""; try (BufferedReader in = new BufferedReader(new FileReader(fullPath))) { String str; while ((str = in.readLine()) != null) { string += str + "\n"; } } return string; }
source share