본문 바로가기

컴퓨터/언어,프로그래밍

java 자바 에서 파일에 내용추가 하는 방법

1, 자바에서 파일을 생성하고 읽기쓰기동시에 할 수 있나요? 방법좀...
RandomAccessFile 은 읽기쓰기로 열리는듯 한데 다른것은 없나요?
그리고 RandomAccessFile에서 int, short, long를 비트로쓰면.. 아스키 코드 번호의 값이 나오는것 같습니다. '\n'문자도 그냥 문자형태로 적혀버립니다. 문자형태가 아니라 효과로 나타나게 할 수 없나요? 정수면 정수.. 1234567890을 쓰면 그냥 그대로 텍스트로 파일에 출력되게 할수 있는방법 없나요?

2, 파일 포인터의 위치를 임의로 옮길수는 없나요?
이것도 RandomAccessFile에 파일의 길이구하는 함수사용해서 seek로 옮기는 방법말구요 그냥 파일의 끝.. 처음부분 이런슥으로요.. C언어에 있는 cur, end 이런것처럼요..

3, 파일에 내용을 추가적으로 쓸 수 없나요? 새로쓰면 기존의 내용이 계속 지워지네요.. 그래서 RandomAccessFile이 함수로 읽기 쓰기로 열어서 파일포인터의 위치를 끝으로 옮기고 쓰는 방식을 사용했거든요..C언어에 있는 append같은거요.. 아니면 첨부터 추가모드로 여는 방법이요..

4, 마지막으로 객체?를 몇개 사용해야 하는지 모르는 상황에서 (사용할때 마다 가변적을..) 객체 생성방법은 없나요? 음.. java는 포인터 개념이 없어서.. 잘모르겠네요. C의 메모리 할당 같은것이요...



1. RandomAccessFile는 한번의 생성으로 쓰기/읽기가 되어서
좋지만 한글 처리에 약간 문제점이 있어서
BufferedWriter와 BufferedReader를 이용하였습니다.
2. 
최초로 포인트를 옮겨서 입력할꺼라면
[입력]
[NewLine]
[기존에 적혀 있던 내용 입력]
[flush()]의 순서대로 하시면 되구요
포인트를 특정 위치로 옮기실꺼면
기존에 적혀 있던 내용을 String관련 된 함수를 이용하여 잘라 낸 후
[잘라진 기존에 적혀 있던 내용1]
[NewLine]
[새로 입력할 내용]
[NewLine]
[잘라진 기존에 적혀 있던 내용2]
[flush()] 의 순서대로 하시면 되겠네요.
그리고 포인트를 문서의 마지막으로 바꾸는 방법은 아래 소스에 적혀 있습니다. 
그리고 한마디 하자면 JAVA에는 포인트(*)가 없기 때문에
함수를 이용해야만 합니다. C를 자꾸 적용시켜서 생각하시면 오히려
자바를 공부하는데 짐이 될 수도 있습니다. (제가 첨에 좀 고생했습니다.)
3. 파일에 내용 추가는 아래 소스에 적혀 있습니다.
4. 객체를 가변적으로 생성한다라... 사용할때마다 가변적인 객체 생성이라면
util에 있는 Random함수를 이용하자는 건지 아니면 가변적인 패턴이 있다는
얘긴지 잘 모르겠네요 그리고 생성 즉 BufferedWriter bw = new BufferedWriter()
이와 같이 생성을 할때마다 메모리에 객체를 생성하기 때문에 쓸데 없이 필요 없는
생성은 프로그램이 무거워집니다.(전 아무리 생각해도 가변적인 생성은 어쩔때 필요한지 모르겠군요)
채팅 프로그램을 짤때 
Thread를 이용하여 wait()하고 있다가 사용자가 접속(Connect)를 할 경우
생성을 해주는 경우는 있습니다.
질문추가의 답변. 
방법이 있긴 하나 메모리에 올려야 하므로 프로그램 동작 속도가 줄어들 수 있습니다.
예를 들면 한 파일을 여러 함수를 이용하여 생성하면 됩니다.
File file = new File("test.txt");
BufferedWriter bf = new BufferedWriter(new FileWriter(file));
RandomAccessFile raf = new RandomAceessFile(file);
이럴 경우 BufferedWriter 클래스의 함수들과 (newLine()이 있죠)
RandomAccessFile 클래스의 함수들을 이용하실수 있습니다.
==========================================================
import java.io.*;
import java.util.*;

class test 
{
	public static void main(String[] args) 
	{
		
		String str = "12345";

		try
		{	
			File file = new File("test.txt");
			input(file,str,"hmmm");	
			// new = 새로 쓰기, old = 붙여서 이어 쓰기, else = 한줄 개행한 후 이어서 쓰기
			System.out.println(output(file));

		}
		catch (Exception e)
		{
			System.out.println(e);
		}
	}
	static void input(File file,String str,String mode) {
		
		int fileLen = fileLength(file);
		String fileOut = output(file);
		try
		{
			BufferedWriter buffWrite = new BufferedWriter(new FileWriter(file));
			if (mode.equals("new"))
			{				
				buffWrite.write(str,0,str.length());
				buffWrite.flush();
			}else if(mode.equals("old")) {
				str = fileOut + str;
				buffWrite.write(str,0,str.length());
				buffWrite.flush();
			}else if(mode.equals("else")) {
				str = fileOut + "\n" + str;
				buffWrite.write(str,0,str.length());
				buffWrite.flush();
			}else {	// else와 같은 기능 다른 방법의 코딩
				buffWrite.write(fileOut,0,fileLen);
				if (fileLen != 0) {
					buffWrite.newLine();
				}
				buffWrite.write(str,0,str.length());
				buffWrite.flush();
			}
buffWrite.close(); } catch (Exception e) { System.out.println(e); } } static int fileLength(File file) { int b,count = 0; try { BufferedReader buffRead = new BufferedReader(new FileReader(file)); while ((b = buffRead.read()) != -1) { count++; }
buffRead.close(); } catch (Exception e) { System.out.println(e); } return count; } static String output(File file) { int b; String fileContent = ""; try { BufferedReader buffRead = new BufferedReader(new FileReader(file)); while ((b = buffRead.read()) != -1) { fileContent += (char)b; }
buffRead.close(); } catch (Exception e) { System.out.println(e); } return fileContent; } }

제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...