1
import java.io.*;
2
import java.nio.*;
3
import java.nio.channels.*;
4![](/Images/OutliningIndicators/None.gif)
5
/** A class used to demonstrate mapped file channel i/o
6
* and file locking
7
*/
8
public class CaseReverserNIO {
9
/** Method reverses the case of characters in a file
10
* @param args[0] The name of the input/output file
11
* @throws IOException
12
* if an error is detected opening or closing the
13
* file
14
*/
15
public static void main( String[] args ) throws IOException {
16
RandomAccessFile raf = null;
17
FileChannel fc = null;
18
FileLock lock = null; //锁
19
if ( args.length >= 1 ) try {
20
File f = new File( args[0] );
21
raf = new RandomAccessFile( f, "rw" );
22
fc = raf.getChannel(); //获得管道
23
lock = fc.lock(); //加锁
24
MappedByteBuffer mbb
25
= fc.map( FileChannel.MapMode.READ_WRITE, 0,
26
fc.size() );
27
char c;
28
for ( int i = 0; i < mbb.limit(); i++ ) {
29
c = (char) mbb.get( i );
30
if ( Character.isLowerCase( c ) ) {
31
mbb.put( i,
32
(byte) Character.toUpperCase( c ) );
33
} else if ( Character.isUpperCase( c ) ) {
34
mbb.put( i,
35
(byte) Character.toLowerCase( c ) );
36
}
37
}
38
}
39
catch( IOException iox ) {
40
System.out.println( iox );
41
}
42
finally {
43
fc.close();
44
raf.close();
45
lock.release(); //解锁
46
} else {
47
System.out.println( "Provide an input filename" );
48
}
49
}
50
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
38
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
39
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
42
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
49
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
50
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
注意:
java.nio提供了一种方法通过进程锁定一个文件;
没有写动作;
另外,修改后的文件的最后修改时间不变(恐怖)。