RandomAccessFileŬ·¡½º´Â FileInputStream, FileOutputStreamÀÇ ½ºÆ®¸² ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏÁö ¾Ê°íµµ ÆÄÀÏÀ» ´Ù·ê ¼ö ÀÖ´Â °£ÆíÇÑ ¹æ¹ýÀ» Á¦°øÇØ ÁÝ´Ï´Ù. À̸§¿¡¼µµ ¾Ë ¼ö ÀÖµíÀÌ ÆÄÀÏ(File)¿¡ ´ëÇÑ ÀÓÀÇÀÇ Á¢±Ù(Random Access)ÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀÔ´Ï´Ù. ¾Æ·¡ÀÇ ¿¹Á¦´Â Test¶õ ÆÄÀÏÀ» »ý¼ºÇÑ ÈÄ ±×°÷¿¡ ¼øÂ÷ÀûÀ¸·Î °ªÀ» ±â·ÏÇϰí, ƯÁ¤ À§Ä¡¸¦ ã¾Æ ±×°÷ÀÇ °ªÀ» ´Ù½Ã ´Ù¸¥ °ªÀ¸·Î ¹Ù²ãÁÖ´Â ¿¹Á¦ÀÔ´Ï´Ù.
RandomAccessFileTest.java (RandomAccessFileÀ» Å×½ºÆ®ÇÑ ¿¹Á¦) |
import java.io.*; public class RandomAccessFileTest { static String s = "ILoveJava~"; static String q = "Jabook!"; public static void main(String[] args) throws Exception{ RandomAccessFile rf = new RandomAccessFile("RandomAccessTest.txt", "rw"); rf.writeChars(s); rf.close(); rf = new RandomAccessFile("RandomAccessTest.txt", "rw"); rf.seek(10); rf.writeChars(q); rf.close(); rf = new RandomAccessFile("RandomAccessTest.txt", "r"); System.out.println("±Û³»¿ëÀº" + rf.readLine()); rf.close(); } } |
C:\JavaExample\09>javac RandomAccessFileTest.java C:\JavaExample\09>java RandomAccessFileTest ±Û³»¿ëÀº I L o v e J a b o o k ! |
¸ÕÀú ¡®RandomTest¡¯¶õ ÆÄÀÏ À̸§°ú ¡®rw¡¯¶ó´Â ¸Å°³º¯¼ö¸¦ °®°í RandomAccessFile °´Ã¼ rf¸¦ »ý¼ºÇÏ¿´½À´Ï´Ù. ¿©±â¼ ¡®RandomAccessTest.txt¡¯¶ó´Â ÆÄÀÏÀÌ »ý¼ºµË´Ï´Ù. ¡®rw¡¯´Â »ý¼ºµÈ ¡®RandomAccessTest.txt¡¯ÆÄÀÏ¿¡ Àбâ(read)¿Í ¾²±â(write)°¡ °¡´ÉÇÏ´Ù´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. ±×·³ ¸¸¾à ¡®rw¡¯´ë½Å¿¡ ¡®r¡¯À» ½è´Ù¸é ¾î¶»°Ô µÇ¾úÀ» ±î¿ä? À§ÀÇ ±¸¹®¿¡¼´Â writeDouble¸Þ¼µå¸¦ »ç¿ëÇÏ¸é¼ ±â·ÏÀ» Çϰí Àִµ¥ ¡®r¡¯·Î ¼³Á¤µÇ¾î ÀÖ´Ù¸é ±â·ÏÀ» ÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ¡®java.io.IOException: ¾×¼¼½º°¡ °ÅºÎµÇ¾ú½À´Ï´Ù¡¯ ¶ó´Â ¿¡·¯¹®À» ¸¸³ª°Ô µË´Ï´Ù.
n RandomAccessFile rf = new RandomAccessFile("RandomAccessTest.txt", "rw");
¢Ñ RandomAccessFile |
ÀÓÀÇ·Î Á¦¾î°¡ °¡´ÉÇÑ ÆÄÀÏÀ» »ý¼ºÇϰųª Á¢±ÙÇÏ¿© ÆÄÀÏÀÇ ³»¿ë¿¡ ´ëÇÑ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù. |
¡°ILoveJava~¡±¶ó´Â ±ÛÀ» writeChars(s)¸Þ¼µå¸¦ »ç¿ëÇÏ¿© ¡®RandomAccessTest.txt¡¯ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. ±×¸®°í close()¸Þ¼µå¸¦ »ç¿ëÇÏ¿© ÆÄÀÏ ½ºÆ®¸²À» ´Ý°í ½ºÆ®¸²°ú ¿¬°üµÈ ½Ã½ºÅÛ ÀÚ¿øÀ» ÇØÁ¦ÇÕ´Ï´Ù.
n rf.writeChars(s);
n rf.close();
´Ù½Ã RandomAccessFile°´Ã¼ rf¸¦ »ý¼ºÇÕ´Ï´Ù. ÆÄÀÏÀÇ À̸§Àº ¡®RandomAccessTest.txt¡¯À̰í, ¼Ó¼ºÀº ¡®rw¡¯ÀÔ´Ï´Ù. ¾Æ±î ±× ÆÄÀÏ¿¡ ´Ù½Ã »õ ±ÛÀ» ¾²´Â °ÍÀÔ´Ï´Ù.
n rf = new RandomAccessFile("RandomAccessTest.txt", "rw");
n rf.seek(10);
n rf.writeChars(q);
n rf.close();
±×·±µ¥ À̹ø¿¡´Â seek(10)¸Þ¼µå¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù. ÀÌ ¸Þ¼µå´Â ÆÄÀÏ Æ÷ÀÎÅÍ ¿ÀÇÁ¼ÂÀ» ¼³Á¤ÇÏ´Â ¸Þ¼µåÀÔ´Ï´Ù. ½±°Ô ¸»ÇÏ¸é ÆÄÀÏÀÇ Æ¯Á¤ÇÑ byteÀ§Ä¡¸¦ ±â¾ïÇϰí ÀÖ´Ù´Â ¸»ÀÔ´Ï´Ù. ±×¸®°í ±× ¹Ù·Î ¾Æ·¡ ±¸¹®¿¡¼ writeChars(q)¸Þ¼µå¸¦ »ç¿ëÇÏ¿© seek()¸Þ¼µå¿¡¼ ÁöÁ¤ÇÑ ¹ÙÀÌÆ® À§Ä¡¸¦ Áö³ ÈÄ °ªÀ» ¡®Jabook!¡¯À¸·Î ¹Ù²ã¹ö·È½À´Ï´Ù. ±×·³ ±× ¡®10¡¯¶ó´Â ¹ÙÀÌÆ® À§Ä¡´Â ¾îµð Àϱî¿ä? ±× À§Ä¡´Â ¹Ù·Î »ý¼ºµÈ °ªÀÇ ¹ÙÀÌÆ®¿Í °ü·ÃÀÌ ÀÖ½À´Ï´Ù. ¿©·¯ºÐÀº char¸¦ Ç¥ÇöÇÒ ¶§ ÇѱÛÀÚ´Â 2byte¸¦ Â÷ÁöÇÑ´Ù´Â °ÍÀ» Àß ¾Ë°í ÀÖÀ» °ÍÀÔ´Ï´Ù. ¹Ù·Î ¡®10¡¯À̶õ ÆÄÀÏÀÇ byte°¡ 10byte°¡ µÇ´Â ÁöÁ¡À» ¸»ÇÕ´Ï´Ù. À§ÀÇ ¿¹Á¦¿¡¼´Â ¡°Ilove¡±¶ó´Â ±Û³»¿ëÁß ¡®e¡¯Ãâ·Â°ªÀÇ ½ÃÀÛÀ§Ä¡°¡ 10byte°¡ µË´Ï´Ù. ÇÏÁö¸¸ À§¿¡¼ ¸»¾¸ µå·ÈµíÀÌ ±× ÁöÁ¡À» Áö³ ÈÄÀÇ °ª-Áï ¡°Java~¡±ÀÇ °ªÀÌ ¡°Jabook!¡±À¸·Î ¹Ù²î¾ú½À´Ï´Ù.
¢Ñ seek()¸Þ¼µå |
ÆÄÀÏÆ÷ÀÎÅ͸¦ ƯÁ¤ÇÑ Àý´ëÀ§Ä¡·Î ¼³Á¤ÇÏ¿©, ÇØ´ç ÀÛ¾÷À» ¼öÇàÇϵµ·Ï ÇØÁØ´Ù. »ý¼ºÀڸŰ³º¯¼ö°¡ ¡®r¡¯À̸é Àбâ Àü¿ë, ¡®rw¡¯¸é Àбâ, ¾²±â ¸ðµÎ °¡´ÉÇÏ´Ù. |
¶Ç ´Ù½Ã RandomAccessFile °´Ã¼ rf¸¦ »ý¼ºÇÏ¿´½À´Ï´Ù. À̹ø¿¡´Â ¼Ó¼ºÀ» ¡®r¡¯·Î¸¸ Çß½À´Ï´Ù. ÇÏÁö¸¸ À̹ø¿¡´Â ÀúÀåµÇ¾îÁø ¡®RandomAccessTest.txt¡¯ÆÄÀÏÀ» Àб⸸ Çϱ⠶§¹®¿¡ »ó°üÀÌ ¾ø½À´Ï´Ù.
n rf = new RandomAccessFile("RandomAccessTest.txt", "r");
n System.out.println("±Û³»¿ëÀº" + rf.readLine());
n rf.close();
³¡À¸·Î readLine()¸Þ¼µå¸¦ »ç¿ëÇÏ¿© ¡®RandomAccessTest.txt¡¯ÀÇ ³»¿ëÀ» Ãâ·ÂÇÏ¿´½À´Ï´Ù. ±ÛÀÇ ³»¿ëÀº ¡°IloveJava~¡±°¡ ¾Æ´Ñ ¡°IloveJabook!¡±ÀÌ Ãâ·ÂµË´Ï´Ù. ¸ø ¹ÏÀ¸½Ã°Ú´Ù¸é »õ·Î »ý¼ºµÈ ¡®RandomAccessTest.txt¡¯À» ¿°í È®ÀÎÇØ º¸½Ã±â¹Ù¶ø´Ï´Ù. ÀÌ·¸°Ô RandomAccessFileÀº FileInputStreamŬ·¡½º, FileOutputStreamŬ·¡½º³ª DataInputŬ·¡½º, DataOutputŬ·¡½º¸¦ »ç¿ëÇÏÁö ¾Ê¾Æµµ ¿øÇÏ´Â ÆÄÀÏÀÇ ¿øÇÏ´Â À§Ä¡¿¡ Á¢±ÙÇÏ¿© °ªÀ» º¯ÇÏ°Ô ÇÏ´Â ¶§ À¯¿ëÇÏ°Ô »ç¿ëµË´Ï´Ù.
ÀÌ·¸°Ô RandomAccessFileŬ·¡½º´Â ÆÄÀÏ¿¡ Á¢±ÙÇØ¼ µ¥ÀÌÅ͸¦ ¼öÁ¤ÇÒ ¶§ ÆíÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¸¸µç Ŭ·¡½ºÀÔ´Ï´Ù. »ç¿ëÇÏ½Ç ¶§ ¡®r¡¯°ú ¡®rw¡¯ ¼³Á¤ÀÌ¶ó´ø°¡ seek()¸Þ¼µåÀÇ »ç¿ëµî¿¡ Á¶½É¸¸ ÇØÁÖ¸é Á¤¸» À¯¿ëÇÑ Å¬·¡½ºÀÔ´Ï´Ù.
RandomAccessFile »ý¼ºÀÚ¸Þ¼µå |
public RandomAccessFile(File file, String mode) : File Àμö·Î ÁöÁ¤µÈ ÆÄÀÏ¿¡¼ ÀÐ°í ¼±ÅÃÀûÀ¸·Î ¾²±â À§ÇÑ ¹«ÀÛÀ§ ¾×¼¼½º ÆÄÀÏ ½ºÆ®¸²À» ÀÛ¼ºÇÕ´Ï´Ù. public RandomAccessFile(String name, String mode) : Á¤µÈ À̸§ÀÇ ÆÄÀÏ¿¡¼ ÀÐ°í ¼±ÅÃÀûÀ¸·Î ¾²±â À§ÇÑ ¹«ÀÛÀ§ ¾×¼¼½º ÆÄÀÏ ½ºÆ®¸²À» ÀÛ¼ºÇÕ´Ï´Ù. |
RandomAccessFile ÁÖ¿ä ¸â¹ö¸Þ¼µå |
public void close() : À§ ¾×¼¼½º ÆÄÀÏ ½ºÆ®¸²À» ´Ý°í ½ºÆ®¸²°ú ¿¬°üµÈ ½Ã½ºÅÛ ÀÚ¿øÀ» ÇØÁ¦ÇÕ´Ï´Ù. public long length() : ÆÄÀÏÀÇ ±æÀ̸¦ ¸®ÅÏÇÕ´Ï´Ù. public int read() : ÆÄÀÏ¿¡¼ µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ®¸¦ ÀнÀ´Ï´Ù. public int read(byte[] b) : ÃÖ´ë b.length ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ÆÄÀÏ¿¡¼ ¹ÙÀÌÆ®ÀÇ ¹è¿·Î ÀоîµéÀÔ´Ï´Ù. public int read(byte[] b, int off, int len) : ÃÖ´ë len ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ ÆÄÀÏ¿¡¼ ¹ÙÀÌÆ®ÀÇ ¹è¿·Î ÀоîµéÀÔ´Ï´Ù. public boolean readBoolean() : ÆÄÀÏ¿¡¼ booleanÀ» ÀнÀ´Ï´Ù. public byte readByte() : ÆÄÀÏ¿¡¼ ºÎÈ£ ºñÆ®°¡ ÀÖ´Â 8 ºñÆ®°ªÀ» ÀнÀ´Ï´Ù. public double readDouble() : ÆÄÀÏ¿¡¼ doubleÀ» ÀнÀ´Ï´Ù. public int readInt() : ÆÄÀÏ¿¡¼ ºÎÈ£ ºñÆ®°¡ ÀÖ´Â 32 ºñÆ® Á¤¼ö¸¦ ÀнÀ´Ï´Ù. public String readLine() : ÆÄÀÏ¿¡¼ ÅØ½ºÆ®ÀÇ ´ÙÀ½ ÇàÀ» ÀнÀ´Ï´Ù. public String readUTF() : ÆÄÀÏ¿¡¼ ÇϳªÀÇ ¹®ÀÚ¿·Î ÀоîµéÀÔ´Ï´Ù. public void seek(long pos) : ´ÙÀ½ Àб⠶Ǵ ¾²±â ¹ß»ý½Ã ÆÄÀÏ ½ÃÀÛ ºÎºÐ¿¡¼ ÆÄÀÏ Æ÷ÀÎÅÍ ¿ÀÇÁ¼ÂÀ» ¼³Á¤ÇÕ´Ï´Ù. public int skipBytes(int n) : Á¤È®È÷ ÀÔ·ÂÀÇ n ¹ÙÀÌÆ®¸¦ °Ç³Ê¶Ý´Ï´Ù. public void write(byte[] b) : b.length°³ÀÇ ¹ÙÀÌÆ®¸¦ ¿ÀÇÁ¼Â off¿¡¼ ½ÃÀÛÇÏ¿© ÁöÁ¤µÈ ¹ÙÀÌÆ® ¹è¿¿¡¼ ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. public void write(byte[] b, int off, int len) : len°³ÀÇ ¹ÙÀÌÆ®¸¦ ¿ÀÇÁ¼Â off¿¡¼ ½ÃÀÛÇÏ¿© ÁöÁ¤µÈ ¹ÙÀÌÆ® ¹è¿¿¡¼ ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. public void write(int b) : ÁöÁ¤µÈ ¹ÙÀÌÆ®¸¦ ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. public void writeBoolean(boolean v) : booleanÀ» 1 ¹ÙÀÌÆ®°ªÀ¸·Î ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. public void writeByte(int v) : byte¸¦ 1 ¹ÙÀÌÆ®°ªÀ¸·Î ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. public void writeDouble(double v) : Double Ŭ·¡½ºÀÇ doubleToLongBits ¸Þ¼µå¸¦ »ç¿ëÇÏ¿© double Àμö¸¦ longÀ¸·Î º¯È¯ÇÑ ´ÙÀ½ long°ªÀ» 8 ¹ÙÀÌÆ® ¼ö·®À¸·Î »óÀ§ ¹ÙÀÌÆ® ¸ÕÀú ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. public void writeInt(int v) : int¸¦ 4 ¹ÙÀÌÆ®°ªÀ¸·Î »óÀ§ ¹ÙÀÌÆ® ¸ÕÀú ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. void writeUTF(String str) : ±â°è¿¡ µ¶¸³ÀûÀÎ ¹æ¹ýÀ¸·Î UTF-8 ÀÎÄÚµùÀ» »ç¿ëÇÏ¿© ¹®ÀÚ¿À» ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. |
jabookÀúÀÚ¸íÇÔ |
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù2ºÎ ÀúÀÚ:ÃÖ¿µ°ü |