Android 내부 저장소에 텍스트 파일(.txt) 읽기 및 쓰기 방법입니다.

/////////////////////// 파일 쓰기 ///////////////////////
String str = input_text.getText().toString();
// 파일 생성
File saveFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/camdata"); // 저장 경로
// 폴더 생성
if(!saveFile.exists()){ // 폴더 없을 경우
saveFile.mkdir(); // 폴더 생성
}
try {
long now = System.currentTimeMillis(); // 현재시간 받아오기
Date date = new Date(now); // Date 객체 생성
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nowTime = sdf.format(date);

BufferedWriter buf = new BufferedWriter(new FileWriter(saveFile+"/CarnumData.txt", true));
buf.append(nowTime + " "); // 날짜 쓰기
buf.append(str); // 파일 쓰기
buf.newLine(); // 개행
buf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
1) File 객체를 생성합니다.

2) Environment.getExternalStorageDirectory().getAbsolutePath() 까지 현재 경로이며 사용할 폴더를 하나 생성해줍니다.

3) 폴더가 없을 경우 mkdir()을 통해 생성해줍니다.

4) BufferedWriter를 통해 파일을 엽니다. 두번째 parameter를 true로 함으로써 파일을 이어서 쓰도록 합니다.

5) 사용 후 close()로 객체를 꼭 닫아줍니다.

/////////////////////// 파일 읽기 ///////////////////////
// 파일 생성
String line = null; // 한줄씩 읽기
File saveFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/camdata"); // 저장 경로
// 폴더 생성
if(!saveFile.exists()){ // 폴더 없을 경우
saveFile.mkdir(); // 폴더 생성
}
try {
BufferedReader buf = new BufferedReader(new FileReader(saveFile+"/CarnumData.txt"));
while((line=buf.readLine())!=null){
tv.append(line);
tv.append("\n");
}
buf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

1) File 객체를 생성합니다. 2) Environment.getExternalStorageDirectory().getAbsolutePath() 까지 현재 경로이며 사용할 폴더를 하나 생성해줍니다. 3) 폴더가 없을 경우 mkdir()을 통해 생성해줍니다. 4) BufferedReader 를 통해 파일을 엽니다.


5) while문을 이용하여 파일을 한줄씩 읽어옵니다. 5) 사용 후 close()로 객체를 꼭 닫아줍니다.







정보가 유익하셨다면 아래 공감버튼 눌러주시면 감사하겠습니다.

질문사항은 댓글로 달아주시면 성의껏 답변해드리겠습니다.








TCP/IP 는 패킷 통신 방식으로 IP(인터넷 프로토콜)와 TCP(전송제어 프로토콜)로 구성되어있습니다.

이번에는 C#으로 TCP/IP 통신 프로그램을 이용하여 간단한 채팅프로그램을 만들어보겠습니다.




* 개발 환경

개발 툴 : Visual Studio 15.0(2017)

개발 언어 : C#


* 소스 코드(서버)


TcpListener Server; // 소켓 서버

TcpClient Client; // 클라이언트

StreamReader Reader; 

StreamWriter Writer; 

NetworkStream stream; // 네트워크 스트림 연결

Thread ReceiveThread; 

bool Connected;

private delegate void AddTextDelegate(string strText); // 크로스 쓰레드 호출


public Form1()

{

     InitializeComponent();

}


private void Form1_Load(object sender, EventArgs e)

{

     Thread ListenThread = new Thread(new ThreadStart(Listen)); // 서버 시작

     ListenThread.Start();

}


private void button1_Click(object sender, EventArgs e) // 보내기 버튼

{

     textBox1.AppendText("Me : " + textBox2.Text + "\r\n"); // 화면에 출력

     Writer.WriteLine(textBox2.Text); // 보내버리기

     Writer.Flush();

     textBox2.Clear(); 

}


private void Form1_FormClosing(object sender, FormClosingEventArgs e) // 폼 종료

{

     Connected = false;

     if (Reader != null) Reader.Close();

     if (Writer != null) Writer.Close();

     if (Server != null) Server.Stop();

     if (Client != null) Client.Close();

     if (ReceiveThread != null) ReceiveThread.Abort(); // 사용한 객체를 모두 닫아준다

}


private void Listen() // 클라이언트와 연결하기

{

     AddTextDelegate AddText = new AddTextDelegate(textBox1.AppendText);

     IPAddress addr = new IPAddress(0); // 서버 ip

     int port = 8080; // 서버 포트

     Server = new TcpListener(addr, port);

     Server.Start(); // 서버 시작

     Invoke(AddText, "Server Start!" + "\r\n");

     Client = Server.AcceptTcpClient(); // 클라이언트 연결 수락

     Connected = true;

     Invoke(AddText, "Connected to Client!" + "\r\n");

     stream = Client.GetStream(); // 클라이언트 스트림 값 받아오기

     Reader = new StreamReader(stream);

     Writer = new StreamWriter(stream);

     ReceiveThread = new Thread(new ThreadStart(Receive)); // 값을 받기 위한 쓰레드

     ReceiveThread.Start();

}


private void Receive() // 클라이언트에게 받기

{

     AddTextDelegate AddText = new AddTextDelegate(textBox1.AppendText);

     while(Connected)

     {     

          Thread.Sleep(1);

          if(stream.CanRead) // 받아온 데이터가 있다면 출력

          {

               string tempStr = Reader.ReadLine();

               if(tempStr.Length > 0)

               {

                    Invoke(AddText, "You : " + tempStr + "\r\n");

               }

          }

     }

}



* 소스 코드(클라이언트) - 서버와 거의 비슷함


TcpListener Server;

TcpClient Client;

StreamReader Reader;

StreamWriter Writer;

NetworkStream stream;

Thread ReceiveThread;

bool Connected;


private delegate void AddTextDelegate(string strText);


public Form1()

{

     InitializeComponent();

}


private void Form1_FormClosing(object sender, FormClosingEventArgs e) // 폼 종료

{

     Connected = false;

     if (Reader != null) Reader.Close();

     if (Writer != null) Writer.Close();

     if (Server != null) Server.Stop();

     if (Client != null) Client.Close();

     if (ReceiveThread != null) ReceiveThread.Abort();

}


private void button1_Click(object sender, EventArgs e) // 보내기 버튼

{

     textBox1.AppendText("Me : " + textBox2.Text + "\r\n");

     Writer.WriteLine(textBox2.Text); // 보내버리기

     Writer.Flush();

     textBox2.Clear();

}


private void Form1_Load(object sender, EventArgs e) // 폼 실행

{

     String IP = "192.168.x.x"; // 접속 할 서버 아이피를 입력

     int port = 8080; // 포트

     Client = new TcpClient();

     Client.Connect(IP, port);

     stream = Client.GetStream();

     Connected = true;

     textBox1.AppendText("Connected to Server!" + "\r\n");

     Reader = new StreamReader(stream);

     Writer = new StreamWriter(stream);

     ReceiveThread = new Thread(new ThreadStart(Receive));

     ReceiveThread.Start();

}


private void Receive() // 서버로 부터 값 받아오기

{

     AddTextDelegate AddText = new AddTextDelegate(textBox1.AppendText);

     while (Connected)

     {

          Thread.Sleep(1);

          if (stream.CanRead)

          {

               string tempStr = Reader.ReadLine();

               if (tempStr.Length > 0)

               {

                    Invoke(AddText, "You : " + tempStr + "\r\n");

               }

          }

     }

}



* 실행 화면


서버(좌측), 클라이언트(우측) 실행화면




오류나 질문사항은 댓글로 달아주세요!!






안녕하세요 열코입니다.

이번 시간에는 자바에서 String(문자열) 사용법에 대해 알아보겠습니다.

자바에서 문자열 사용 시 자바에서 제공하는 String class를 참조합니다.



※ 선언 및 정의

⇒ 문자열을 사용하기 위해 String 객체를 선언하고 정의합니다.

선언 및 정의 방법은 여러 가지가 있으나 아래 예는 주로 사용되는 방법입니다.


사용법 1)


1
2
3
String str1;
 
str1 = "str1";
cs


사용법 2)


1
String str2 = "str2";
cs


사용법 3)


1
String str3 = new String("str3");
cs


사용법 4)


1
2
3
String str4 = new String();
 
str4 = "str4";
cs



※ length : 문자열의 길이

⇒ 해당 객체의 문자열 길이를 반환(int형) 합니다. (null은 포함하지 않음)


1
2
3
String str = "abcde";
 
System.out.println(str.length());  // 5 출력
cs




※ isEmpty : 문자열이 비어있는지 확인

⇒ 문자열의 길이(length)가 0이면 true 반환(boolean형), 0이 아니면 false를 반환합니다.


1
2
3
4
5
6
7
8
9
String str = new String();
 
if(str.isEmpty())  // "empty" 출력
 
     System.out.println("empty");
 
else
 
     System.out.println("not empty");
cs



※ charAt : 문자 반환

⇒ 문자열 중 해당 인덱스의 문자(char형)를 반환합니다.(인덱스는 0 ~ 문자열의 길이(length) -1)


1
2
3
String str = new String("abcd");
 
System.out.println(str.charAt(2));  // 'c' 출력
cs



※ getChars : 문자 배열 복사

⇒ 문자열을 문자(char) 배열로 복사합니다.


1
2
3
4
5
6
7
String str = new String("abcd");
 
char [] ch = new char[4];
 
str.getChars(02, ch, 0); // 시작 인덱스, 끝 인덱스, 복사 받을 char 배열 이름, 복사 시작 위치
 
System.out.println(ch);  // "ab" 출력
cs



※ equals : 문자열 비교

⇒ 해당 문자열과 매개변수의 문자열이 같은 지 비교하여 true 또는 false를 반환합니다.(boolean형)


1
2
3
4
5
6
7
8
9
10
11
String str = new String("abcd");
 
String str2 = new String("abc");
 
if(str.equals(str2))  // "not equal" 출력
 
     System.out.println("equal");
 
else
 
     System.out.println("not equal");
cs


(자바에서 문자열 비교를 ==연산자로 비교할 수 없습니다!)



※ compareTo : 문자열 비교(사전 순으로 대소 비교)

⇒ 해당 문자열과 매개변수의 문자열을 사전 순으로 비교합니다.


1
2
3
4
5
String str = new String("aaa");
 
String str2 = new String("bbb");
 
System.out.println(str.compareTo(str2)); // -1 출력
cs


반환값 : 

str과 str2의 같을 경우 : 0

str이 str2보다 사전 순으로 앞인 경우 : -1

str이 str2보다 사전 순으로 뒤인 경우 : 1

* str의 마지막 문자열과 str2의 마지막 문자를 제외하고 같은 경우

예 ) String str = new String("ccca");

       String str2 = new String("cccz");

       str과 str2의 마지막 문자열을 비교하여 사전 순 차이만큼 반환 : -25



※ indexOf : 문자열 위치

⇒ 해당 문자열이 위치하는 인덱스를 반환합니다.(int형)


1
2
3
String str = new String("abcd");
 
System.out.println(str.indexOf("c")); // 2 출력
cs


(해당 문자열이 존재하지 않으면 -1을 반환합니다.)



※ lastIndexOf : 문자열 마지막 위치

⇒ 해당 문자열이 마지막으로 위치하는 인덱스를 반환합니다.(int형)


1
2
3
String str = new String("abcdeabcda");
 
System.out.println(str.lastIndexOf("c")); // 7 출력
cs



※ subString : 문자열 자르기

⇒ 해당 문자열의 인덱스만큼 잘라서 반환합니다.(String형)


1
2
3
4
5
String str = new String("abcdefg");
 
System.out.println(str.substring(26)); // "cdef" 출력
 
System.out.println(str.substring(5)); // "fg" 출력
cs


(매개 변수가 2개인 경우 : 해당 범위만큼 자름, 1개인 경우 : 앞에서부터 인덱스만큼 자름)



※ concat : 문자열 합치기

⇒ 해당 문자열 뒤에 매개변수 문자열을 서로 합칩니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String str = new String("a");
 
String str2 = new String("b");
 
String str3 = new String();
 
 
 
str3 = str.concat(str2);
 
String str4 = str+str2; // concat과 같은 동작
 
 
 
System.out.println(str3); // "ab" 출력
 
System.out.println(str4); // "ab" 출력
cs



※ replace : 문자열 치환 

⇒ 해당 문자를 찾아 다음 문자로 변경합니다.


1
2
3
4
5
String str = new String("abc");
 
str = str.replace('b''k');
 
System.out.println(str); // "akc" 출력
cs



※ contains : 문자열 포함

⇒ 해당 문자열이 포함되어 있는지 확인합니다. 포함할 경우 true, 아닌 경우 false 반환(boolean형)


1
2
3
4
5
6
7
8
9
String str = new String("abc");
 
if(str.contains("bc")) // "contain" 출력
 
     System.out.println("contain");
 
else
 
     System.out.println("not contain");
cs



※ split : 문자열 분리

⇒ 문자열을 해당 문자열을 기준으로 모두 분리합니다.(String [] 반환)


1
2
3
4
5
6
7
8
9
10
11
String str = new String("a b c d e f");
 
String[] str2 = new String[6];
 
for(int i = 0; i < 6; i++
 
     str2[i] = str.split(" ")[i]; 
 
for(int i = 0; i < 6; i++
 
     System.out.print(str2[i]); // abcdef 출력
cs



※ trim : 문자열 공백 제거

⇒ 해당 문자열의 앞, 뒤의 공백을 모두 제거합니다.(문자열 사이의 공백은 제거되지 않음)


1
2
3
4
5
String str = new String(" a b c ");
 
String str2 = str.trim();
 
System.out.println(str2); // "abc" 출력
cs



아래 두 메소드는 Integer class의 메소드입니다. 

자바에서 주로 사용하는 int to String, String to int 변환 방법입니다.


※ toString : int to String

⇒ int형 변수를 String 객체로 변환


1
2
3
4
5
6
7
String str = new String("100");
 
int value = 200;
 
String sum = str + Integer.toString(value);
 
System.out.println(sum); // 100200 출력
cs



※ parseInt : String to int 

⇒ String 객체를 int형 변수로 변환


1
2
3
4
5
6
7
String str = new String("100");
 
int value = 200;
 
int sum = Integer.parseInt(str) + value;
 
System.out.println(sum); // 300 출력
cs




이상 '자바 문자열 사용법'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.





to Top