1. 다음 조건을 만족하도록 파일을 복사하는 프로그램을 작성하시오.
- 현재 소스 파일을 읽어 한 줄의 가장 처음에 줄 번호가 나오도록 하여 다시 새로운 파일에 복사
- 만일 MyClass.java라면 줄 번호가 있는 파일은 MyClass.num으로
import java.io.*;
import java.net.*;
public class MyClass {
public static void main(String[]args) {
int data;
int num = 1; //줄 번호
//불러올 파일 경로 + 이름
String inFname = "C:\\Users\\seongjin\\eclipse-workspace\\Chapter11_one\\src\\MyClass.java";
//새로 만들 파일 경로 + 이름
String outFname = "C:\\Users\\seongjin\\eclipse-workspace\\Chapter11_one\\src\\MyNum.java";
try {
// 읽을 파일 이름으로 FileInputStream 생성
FileInputStream fis = new FileInputStream(inFname);
FileOutputStream fout = new FileOutputStream(outFname);
//인코딩을 위해
InputStreamReader isr = new InputStreamReader(fis, "MS949");
OutputStreamWriter osw = new OutputStreamWriter(fout,"ms949");
while((data = isr.read()) != -1) {
char c = (char)data;
if(num == 1){ //첫번째 줄에 번호를 매기 위한 예외 처리
osw.write(num+++" ");
}
osw.write(c);
if(c == '\n') {
osw.write(num+++" ");
}
}
osw.flush();
isr.close();
osw.close();
fis.close();
fout.close();
System.out.println(outFname + " : 파일이 생성되었습니다.");
}catch(FileNotFoundException e) {
System.err.println("다음 파일이 없습니다. : " + inFname);
}catch(IOException e) {
System.out.println(e);
}
}
}
https://github.com/sjpark2710/Java-Practice/tree/master/Chapter11_one
2. 다음 조건을 만족하도록 이미지 파일을 처리하는 프로그램을 작성하시오.
- 확장자 jpg의 이미지 파일을 읽어 표준 출력에 출력
import java.io.*;
import java.net.*;
public class Two {
public static void main(String[]args) {
int data;
String inFname = "C:\\Users\\seongjin\\eclipse-workspace\\Chapter11_two\\src\\car1.jpg";
try {
FileInputStream fis = new FileInputStream(inFname);
while((data = fis.read()) != -1) {
System.out.println((char)data);
}
}catch(FileNotFoundException e) {
System.err.println("다음 파일이 없습니다" + inFname);
}catch(IOException e){
System.out.println(e);
}
}
}
https://github.com/sjpark2710/Java-Practice/tree/master/Chapter11_two/src
3. 다음 조건을 만족하며 현재 폴더의 하부 파일을 출력하는 프로그램을 작성하시오.
- 하부 폴더와 일반 파일을 구분하여 출력
import java.io.*;
import java.net.*;
public class Three {
public static void main(String[]args) {
String name = "C:\\Users\\seongjin\\eclipse-workspace\\Chapter11-Three\\src";
File f = new File(name);
File[] flist = f.listFiles();
for(File i : flist) {
if(i.isDirectory()) {
System.out.print("폴더 : ");
}else {
System.out.print("파일 : ");
}
System.out.println(i.getName());
}
}
}
https://github.com/sjpark2710/Java-Practice/tree/master/Chapter11-Three
4. 다음 조건을 만족하며 지정한 이름의 폴더를 생성하는 프로그램을 작성하시오.
- 명령행에서 폴더 이름을 입력받아 생성
import java.io.*;
public class Four {
public static void main(String[]args) {
String path = "C:\\Users\\seongjin\\eclipse-workspace\\Chapter11_Four1";
File f = new File(path,args[0]);
try {
f.mkdir();
}catch(Exception e) {
System.out.println(e);
}
}
}
https://github.com/sjpark2710/Java-Practice/tree/master/Chapter11_Four/src
5. 다음 조건을 만족하며 파일 이름을 수정하는 프로그램을 작성하시오.
- 클래스 이름은 Rename
- 명령행에서 이전파일이름 새파일이름 순으로 입력되도록 구현
- java Rename fromfile tofile
import java.io.*;
public class Rename {
public static void main(String[]args) {
String path = "C:\\Users\\seongjin\\eclipse-workspace\\Chapter11_Five\\src";
File file = new File(path,args[0] + ".txt");
File newfile = new File(path,args[1] + ".txt");
if(file.exists()) {
file.renameTo(newfile);
System.out.println(args[0] + "->" + args[1]);
}else {
System.out.println(args[0] + ".txt라는 이름의 파일이 존재하지 않습니다.");
}
}
}
https://github.com/sjpark2710/Java-Practice/tree/master/Chapter11_Four/src
6. 다음 조건을 만족하며 기존 파일을 새로운 파일로 복사하는 프로그램을 작성하시오.
- 클래스 이름은 FileCopy
- 명령행에서 기본파일이름 복사된새파일이름 순으로 입력되도록 구현
- java FileCopy originfile copyfile
package chapter11_Six;
import java.io.*;
public class FileCopy {
public static void main(String[]args) {
int data;
String path = "C:\\Users\\seongjin\\eclipse-workspace\\chapter11_Six\\src\\chapter11_Six";
// 입력받는 파일들은 txt라고 가정
File file = new File(path,args[0]+".txt");
File newfile = new File(path,args[1]+".txt");
if(file.exists()) {
try {
newfile.createNewFile();
// 읽을 파일 이름으로 FileInputStream 생성
FileInputStream fis = new FileInputStream(file);
FileOutputStream fout = new FileOutputStream(newfile);
// 인코딩을 위해
InputStreamReader isr = new InputStreamReader(fis, "MS949");
OutputStreamWriter osw = new OutputStreamWriter(fout, "MS949");
while((data=isr.read())!=-1) {
char c = (char)data;
osw.write(c);
}
osw.flush();//OutputStreamWriter의 버퍼를 비운다. (출력한다.)
isr.close();
osw.close();
fis.close();
fout.close();
System.out.println("복사가 완료되었습니다.");
}catch(FileNotFoundException e) {
System.out.println(e);
}catch (IOException e) {
System.out.println(e);
}catch (Exception e) {
System.out.println(e);
}
} else {
System.err.println("파일이 없습니다.");
}
}
}
https://github.com/sjpark2710/Java-Practice/tree/master/chapter11_Six
7. 다음 조건을 만족하도록 1:1 채팅 프로그램을 작성하시오.
- 클라이언트에서 입력받을 내용
- 클라이언트의 이름을 표준입력으로 저장
- 서버의 IP 주소를 표준입력으로 저장
- 클라이언트의 간단한 메뉴를 제공하여 실행되도록 구현
- connect : 서버에 접속하기
- bye : 접속 종료하고 클라이언트만 프로그램 종료
- quit : 접속 종료하고 클라이언트와 서버 함께 종료
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
public class ChatServer {
public static int port = 1004;
ServerSocket server;
Socket socket;
public ChatServer(int port) {
this.port = port;
System.out.println(">> 서버를 시작합니다.");
try {
server = new ServerSocket(port);
}catch(IOException e) {
e.printStackTrace();
}
}
public void communicate() {
System.out.println(">> 클라이언트가 접속하길 기다리고 있습니다.(포트번호 : "+port+")");
try {
// 클라이언트 접속 때까지 대기
socket = server.accept();
System.out.println(socket.getInetAddress());
printInfo();
// 서버 소켓에 입력과 출력을 위한 sender와 receiver를 연결
MsgSender sender = new MsgSender("서버", socket);
MsgReceiver receiver = new MsgReceiver("서버", socket);
// sender와 receiver의 스레드를 실행
receiver.start();
sender.start();
} catch(SocketException e){
System.out.println("알 수 없는 이유로 인해 연결이 끊겼습니다.");
}catch(IOException e) {
e.printStackTrace();
}
}
public void close() {
try {
// 클라이언트 소켓 종료
socket.shutdownOutput();
socket.shutdownInput();
socket.close();
}catch(IOException e) {
e.printStackTrace();
}
}
public void printInfo() {
System.out.println(">> 클라이언트가 접속에 성공했습니다.");
// 서비스 포트 번호와 클라이언트 주소와 포트번호 출력
System.out.println(" 서버 포트번호: "+socket.getLocalPort());
System.out.println(" 클라이언트 주소: "+socket.getInetAddress());
System.out.println(" 클라이언트 포트번호: "+socket.getPort());
System.out.println(">>클라이언트에 전달할 메시지를 쓰고 Enter를 누르세요. \n");
}
public static void start() {
ChatServer myServer = new ChatServer(port);
myServer.communicate();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.SocketException;
public class MsgReceiver extends Thread{
String nickname;
Socket socket;
BufferedReader in;
public MsgReceiver(String nickname, Socket socket) {
this.nickname = "["+nickname+"]";
this.socket = socket;
try {
//소켓에 입력 스트림을 연결
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}catch (IOException e) {
System.out.println(e.toString());
// TODO: handle exception
}
}
public void byeClient() {
while(in != null){
try {
//소켓으로부터 받은 메시지를 화면에 출력
String r = in.readLine();
if(r==null) { // quit 입력으로 인해 연결이 끊어졌을 때
in.close();
socket.close();
System.exit(0);
}else {
System.out.println(r);
}
}catch(SocketException e) { // client의 연결이 비정상적으로 끊겼을 때(=bye 입력시)
ChatServer.port = ChatServer.port+1; // port 번호 바꾸고
ChatServer.start();
break;
}catch(IOException e) {
System.out.println(e.toString());
} catch (Exception e) {
System.out.println("연결을 종료하였습니다.");
System.exit(0);
}
}
}
public void run() {
try {
byeClient();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class MsgSender extends Thread {
String nickname;
Socket socket;
PrintWriter out;
public MsgSender(String nickname, Socket socket) {
this.nickname = "["+nickname+"]";
this.socket = socket;
try {
//소켓에 출력 스트림을 연결
out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
}catch (IOException e) {
System.out.println(e.toString());
}
}
public void run() {
Scanner s = new Scanner(System.in);
while(out != null){
String msg = s.nextLine();
//보내는 사람의 별명까지 앞에 붙여 전송
out.println(nickname+msg);
out.flush();
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
import Chapter11_7_1.ChatServer;
public class ChatClient {
Socket socket;
BufferedReader in;
PrintWriter out;
String nickname;
public ChatClient(String ip, int port) {
try {
socket = new Socket(ip, port);
printInfo();
}catch (IOException e) {
e.printStackTrace();
}
}
public void communicate() {
// 클라이언트 소켓에 입력과 출력을 위한 sender와 receiver를 연결
MsgSender sender = new MsgSender(nickname, socket);
MsgReceiver receiver = new MsgReceiver(nickname, socket);
// sender와 receiver의 스레드를 실행
sender.start();
receiver.start();
}
public void close() {
try {
// 클라이언트 소켓 종료
socket.shutdownOutput();
socket.shutdownInput();
socket.close();
}catch(IOException e) {
e.printStackTrace();
}
}
public void printInfo() {
System.out.println(">> 서버 접속에 성공했습니다.");
System.out.println(" 클라이언트 포트번호: "+socket.getLocalPort());
System.out.println(" 서버 주소: "+socket.getInetAddress());
System.out.println(" 서버 포트번호: "+socket.getPort());
System.out.print("닉네임 : ");
Scanner s = new Scanner(System.in);
nickname = s.nextLine();
System.out.println(">>서버에 전달할 메시지를 쓰고 Enter를 누르세요. \n");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("서버 연결 원할 시 'connect'입력");
Scanner s = new Scanner(System.in);
String word = s.nextLine();
String ip;
int port;
if(word.equals("connect")) {
System.out.print("IP : ");
ip = s.nextLine();
System.out.print("Port : ");
port = s.nextInt();
ChatClient client = new ChatClient(ip, port);
client.communicate();
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.Scanner;
public class MsgReceiver extends Thread{
String nickname;
Socket socket;
BufferedReader in;
public MsgReceiver(String nickname, Socket socket) {
this.nickname = "["+nickname+"]";
this.socket = socket;
try {
//소켓에 입력 스트림을 연결
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}catch (IOException e) {
System.out.println(e.toString());
// TODO: handle exception
}
}
public void run() {
while(in != null){
try {
//소켓으로부터 받은 메시지를 화면에 출력
System.out.println(in.readLine());
} catch(IOException e) {
System.out.println("소켓연결을 종료했습니다");
try {
in.close();
socket.close();
System.exit(0);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}
import java.awt.Window;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class MsgSender extends Thread {
String nickname;
Socket socket;
PrintWriter out;
public MsgSender(String nickname, Socket socket) {
this.nickname = "["+nickname+"]";
this.socket = socket;
try {
//소켓에 출력 스트림을 연결
out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
}catch (IOException e) {
System.out.println(e.toString());
}
}
public void run() {
Scanner s = new Scanner(System.in);
while(out != null){
String msg = s.nextLine();
out.println(nickname+msg);
out.flush();
//보내는 사람의 별명까지 앞에 붙여 전송
if(msg.equals("quit")){
try {
out.close();
socket.close();
System.exit(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(msg.equals("bye")){
try {
System.exit(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
https://github.com/sjpark2710/Java-Practice/tree/master/Chapter11_Seven
https://github.com/sjpark2710/Java-Practice/tree/master/Chapter11_Seven1
'개발 > Java' 카테고리의 다른 글
스프링(Spring)이란? (0) | 2022.08.21 |
---|---|
[IntelliJ] IntelliJ 다운로드 및 설치 방법 (0) | 2022.08.17 |
자바(JAVA) 버전 확인하는 3가지 방법 (0) | 2022.08.17 |
자바(JAVA) 설치 및 자바(JAVA) 버젼 확인 방법 (0) | 2022.08.17 |
절대JAVA Chapter10 이벤트 처리와 그래픽 프로그래밍, 프로그래밍 연습 (0) | 2022.04.03 |