You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by "Vladimir Ivanov (JIRA)" <ji...@apache.org> on 2006/02/02 07:13:41 UTC
[jira] Created: (HARMONY-69) java.io.RandomAccessFile(String name,
String mode) doesn't allow to open a file in a read-only mode
java.io.RandomAccessFile(String name, String mode) doesn't allow to open a file in a read-only mode
---------------------------------------------------------------------------------------------------
Key: HARMONY-69
URL: http://issues.apache.org/jira/browse/HARMONY-69
Project: Harmony
Type: Bug
Components: Classlib
Reporter: Vladimir Ivanov
java.io.RandomAccessFile(String name, String mode) doesn't allow to open a file in a read-only mode. Looks like the mode is always "rw".
Note, java.io.RandomAccessFile(File file, String mode) works OK.
Code to reproduce:
import java.io.*;
import java.nio.channels.*;
public class test29 {
private static void testMode(RandomAccessFile raf, int index) {
try {
FileChannel fcr = raf.getChannel();
// fcr.lock() should throw NonWritableChannelException for "r" mode
fcr.lock(0L, Long.MAX_VALUE, false);
fcr.close();
System.out.println("Error " + index);
} catch (NonWritableChannelException e) {
System.out.println("Success" + index + ": " + e);
} catch (Throwable e) {
System.out.println("Exception" + index + ": " + e);
e.printStackTrace();
}
}
public static void testRandomAccessFile_File_String(File f, int index) {
try {
System.out.println("Create RAF(File, Sting): " + f);
RandomAccessFile raf = new RandomAccessFile(f, "r");
testMode(raf, index);
raf.close();
} catch (Throwable e) {
System.out.println("Exception" + index + ": " + e);
e.printStackTrace();
}
}
public static void testRandomAccessFile_String_String(String f, int index) {
try {
System.out.println("Create RAF(File, Sting): " + f);
RandomAccessFile raf = new RandomAccessFile(f, "r");
testMode(raf, index);
raf.close();
} catch (Throwable e) {
System.out.println("Exception" + index + ": " + e);
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
File f = File.createTempFile("temp", ".txt");
f.deleteOnExit();
testRandomAccessFile_File_String(f, 1);
testRandomAccessFile_String_String(f.getAbsolutePath(), 2);
testRandomAccessFile_File_String(f, 3);
} catch (Throwable e) {
System.out.println("Unexpected exception: " + e);
e.printStackTrace();
}
}
}
Steps to Reproduce:
1. Build Harmony (check-out on 2006-01-30) j2se subset as described in README.txt.
2. Compile test29.java using BEA 1.4 javac
> javac -d . test29.java
3. Run java using compatible VM (J9)
> java -showversion test29
Output:
C:\tmp\tmp17>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test29
java version "1.4.2_04"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native Threads, GC strategy: parallel)
Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp23838.txt
Success1: java.nio.channels.NonWritableChannelException
Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp23838.txt
Success2: java.nio.channels.NonWritableChannelException
Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp23838.txt
Success3: java.nio.channels.NonWritableChannelException
C:\tmp\tmp17>C:\harmony\trunk\deploy\jre\bin\java -showversion test29
java version 1.4.2 (subset)
(c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable.
Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp24535.txt
Success1: java.nio.channels.NonWritableChannelException
Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp24535.txt
Error 2
Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp24535.txt
Success3: java.nio.channels.NonWritableChannelException
Suggested fix:
Add the string to set up current mode like the string in the RandomAccessFile(File, String) method in the class RandomAccessFile.java sting #122:
122: isReadOnly = mode.equals("r");
junit test:
------------------------ RandomAccessFileTest.java -------------------------------------------------
import java.io.*;
import java.nio.channels.*;
import junit.framework.*;
public class RandomAccessFileTest extends TestCase {
public void testRandomAccessFile_String_String() {
RandomAccessFile raf = null;
FileChannel fcr = null;
try {
File f = File.createTempFile("temp", ".txt");
f.deleteOnExit();
raf = new RandomAccessFile(f.getAbsolutePath(), "r");
fcr = raf.getChannel();
fcr.lock(0L, Long.MAX_VALUE, false);
fail("NonWritableChannelException expected!");
} catch (NonWritableChannelException e) {
} catch (Throwable e) {
fail("Unexpected exception: " + e);
} finally {
try {
if (fcr != null)
fcr.close();
if (raf != null)
raf.close();
} catch (Exception e) {
}
}
}
public static void main(String[] args) {
junit.textui.TestRunner.run(RandomAccessFileTest.class);
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
[jira] Commented: (HARMONY-69) java.io.RandomAccessFile(String
name, String mode) doesn't allow to open a file in a read-only mode
Posted by "Paulex Yang (JIRA)" <ji...@apache.org>.
[ http://issues.apache.org/jira/browse/HARMONY-69?page=comments#action_12365682 ]
Paulex Yang commented on HARMONY-69:
------------------------------------
An alternative fix is to modify the problematic constructor as follows:
public RandomAccessFile(String fileName, String mode)
throws FileNotFoundException {
this(new File(fileName), mode);
}
> java.io.RandomAccessFile(String name, String mode) doesn't allow to open a file in a read-only mode
> ---------------------------------------------------------------------------------------------------
>
> Key: HARMONY-69
> URL: http://issues.apache.org/jira/browse/HARMONY-69
> Project: Harmony
> Type: Bug
> Components: Classlib
> Reporter: Vladimir Ivanov
>
> java.io.RandomAccessFile(String name, String mode) doesn't allow to open a file in a read-only mode. Looks like the mode is always "rw".
> Note, java.io.RandomAccessFile(File file, String mode) works OK.
> Code to reproduce:
> import java.io.*;
> import java.nio.channels.*;
> public class test29 {
> private static void testMode(RandomAccessFile raf, int index) {
> try {
> FileChannel fcr = raf.getChannel();
> // fcr.lock() should throw NonWritableChannelException for "r" mode
> fcr.lock(0L, Long.MAX_VALUE, false);
> fcr.close();
> System.out.println("Error " + index);
> } catch (NonWritableChannelException e) {
> System.out.println("Success" + index + ": " + e);
> } catch (Throwable e) {
> System.out.println("Exception" + index + ": " + e);
> e.printStackTrace();
> }
> }
> public static void testRandomAccessFile_File_String(File f, int index) {
> try {
> System.out.println("Create RAF(File, Sting): " + f);
> RandomAccessFile raf = new RandomAccessFile(f, "r");
> testMode(raf, index);
> raf.close();
> } catch (Throwable e) {
> System.out.println("Exception" + index + ": " + e);
> e.printStackTrace();
> }
> }
> public static void testRandomAccessFile_String_String(String f, int index) {
> try {
> System.out.println("Create RAF(File, Sting): " + f);
> RandomAccessFile raf = new RandomAccessFile(f, "r");
> testMode(raf, index);
> raf.close();
> } catch (Throwable e) {
> System.out.println("Exception" + index + ": " + e);
> e.printStackTrace();
> }
> }
> public static void main(String[] args) {
> try {
> File f = File.createTempFile("temp", ".txt");
> f.deleteOnExit();
> testRandomAccessFile_File_String(f, 1);
> testRandomAccessFile_String_String(f.getAbsolutePath(), 2);
> testRandomAccessFile_File_String(f, 3);
> } catch (Throwable e) {
> System.out.println("Unexpected exception: " + e);
> e.printStackTrace();
> }
> }
> }
> Steps to Reproduce:
> 1. Build Harmony (check-out on 2006-01-30) j2se subset as described in README.txt.
> 2. Compile test29.java using BEA 1.4 javac
> > javac -d . test29.java
> 3. Run java using compatible VM (J9)
> > java -showversion test29
> Output:
> C:\tmp\tmp17>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test29
> java version "1.4.2_04"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
> BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native Threads, GC strategy: parallel)
> Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp23838.txt
> Success1: java.nio.channels.NonWritableChannelException
> Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp23838.txt
> Success2: java.nio.channels.NonWritableChannelException
> Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp23838.txt
> Success3: java.nio.channels.NonWritableChannelException
> C:\tmp\tmp17>C:\harmony\trunk\deploy\jre\bin\java -showversion test29
> java version 1.4.2 (subset)
> (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable.
> Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp24535.txt
> Success1: java.nio.channels.NonWritableChannelException
> Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp24535.txt
> Error 2
> Create RAF(File, Sting): C:\DOCUME~1\vivanov1\LOCALS~1\Temp\temp24535.txt
> Success3: java.nio.channels.NonWritableChannelException
> Suggested fix:
> Add the string to set up current mode like the string in the RandomAccessFile(File, String) method in the class RandomAccessFile.java sting #122:
> 122: isReadOnly = mode.equals("r");
> junit test:
> ------------------------ RandomAccessFileTest.java -------------------------------------------------
> import java.io.*;
> import java.nio.channels.*;
> import junit.framework.*;
>
> public class RandomAccessFileTest extends TestCase {
> public void testRandomAccessFile_String_String() {
> RandomAccessFile raf = null;
> FileChannel fcr = null;
> try {
> File f = File.createTempFile("temp", ".txt");
> f.deleteOnExit();
> raf = new RandomAccessFile(f.getAbsolutePath(), "r");
> fcr = raf.getChannel();
> fcr.lock(0L, Long.MAX_VALUE, false);
> fail("NonWritableChannelException expected!");
> } catch (NonWritableChannelException e) {
> } catch (Throwable e) {
> fail("Unexpected exception: " + e);
> } finally {
> try {
> if (fcr != null)
> fcr.close();
> if (raf != null)
> raf.close();
> } catch (Exception e) {
> }
> }
> }
> public static void main(String[] args) {
> junit.textui.TestRunner.run(RandomAccessFileTest.class);
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira