본문 바로가기

Programming/JAVA

JAVA 입출력


출처 : JAVA programming

참고하면 좋은 곳 : https://m.blog.naver.com/PostView.nhn?blogId=slrkanjsepdi&logNo=90140711064&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F


@ . 1byte 입/출력

 

자바에서 처리하는 입력과 출력은 스트림(Stream)에 의존

다시말해 모든 형태의 입력과 출력은 1byte의 흐름으로 이루어져 있다는것

 

*. 많이쓰이는 형식

 

@ . 1byte 출력

 

1. 콘솔 출력용

   FileOutputStream fos = new FileOutputStream(FileDescriptor.out);

   BufferedOutputStream bos = new BufferedOutputStream(fos);

   DataOutputStream dos = new DataOutputStream(bos);

   dos.write.....

 

2. 파일 출력용

   File file = new File("파일명");

   FileOutputStream fos = new FileOutoutStream(file);

   BufferedOutputStream bos = new BufferedOutoutStream(fos);

   DataOutputStream dos = new DataOutputStream(bos);

   dos.write....

 

3.네트워크 출력용

   Socket soc = new Socket(....);

   BufferedOutputStream bos = new BufferedOutputStream(soc.getOutputStream());

   DataOutputStream dos = new DataOutputStream(bos);

   dos.write....

 

 

 

@ . 1byte 입력

 

1. 키보드 입력용

   FileInputStream fis = new FileInputStream(FileDescriptor.in);

   BufferedInputStream bis = new BufferedInputStream(fis);

   DataInputStream dis = new DataInputStream(bis);

   dis.read.....

 

2. 파일 입력용

   File file = new File("파일명");

   FileInputStream fis = new FileInputStream(file);

   BufferedInputStream bis = new BufferedInputStream(fis);

   DataInputStreamStream dis = new DataInputStream(bis);

   dis.read.....

 

3. 네트워크 입력용

   Socket soc = new Socket(''');

   BufferedInputStream dis = new DataInputStream(bis);

   dis.read....

 

ex 1)

 

import java.io.*;

public class Round16_Ex05 {

   public static void main(String[] ar){

      File file = new File("C:\\java\\work\\abc.txt");

      //파일에 대한 객체를 생성한다

      try{

         FileOutputStream fos = new FileOutputStream(FileDescriptor.out);

         //콘솔에 대한 출력스트림을 생성한다.

         FileOutputStream fos1 = new FileOutputStream(file);

        //파일에 대한 출력스트림을 생성한다

         byte[] data = {66, 68, 70, 72, (byte)'!');

         fos.write(data);

       //콘솔에 출력

       fos1.write(data);

         //C:\\java\\work\\abc.txt"); 에출력

      }catch(FileNotFoundException fe){

          System.out.println("파일이 없을 때 이것출력");

          System.exit(1);

      }catch(IOException io){

         System.out.println("파일 입출력 에러");

         System.exut(1);

      }

      System.out.println("실행끝");

   }

 

}

 

ex 2)


import java.io.*;

public class Round16_Ex06 {

   public static void main(String[] ar) throws FileNotFoundException, IOException{

 

      FileInputStream fis = new FileInputStream(FileDescriptor.in);

     //콘솔에서 입력받는다

      System.out.print("입력 = ");

      byte by = fis.read();

      //byte타입으로 읽어들인다

 

      File file = new File("C:\\java\\work\\abc.txt");

     //파일로부터 입력객체를 생성한다.

      FileInputStream fis = new FileInputStream(file);

     //파일객체의 입력스트림 생성한다.

      byte[] by = new byte[65536];

      int count = fis.read(by);

     //fis의 입력스트림의 갯수를 샌다

      for(int i = 0; i < count; i++){

         System.out.println(i + " : " + (char)by[i];

       //출력

      }

   }

}

 

ex 3)

 

import java.io.*;

public class Round16_Ex07 {

   public static void main(String[] ar)throws IOException{

 

      File dir = new File("C:\\java\\work");

     File file = new File(dir, "shs.txt");

     //파일 객체를 생성한다

     FileOutputStream fos = new FileOutputStream(file);

     //파일객체를 파일 출력 스트림에 담는다

     BufferedOutputStream bos = new BufferedOutputStream(fos) // 512Byte

     //파일 출력 스트림을 출력버퍼에 담는다 버퍼의 용량은 512Byte이다

     //BufferedOutputStream bos1 = new BufferedOutputStream(fos, 1024); //1024Byte

     //파일 출력 스트림을 출력버퍼에 담는다 버퍼의 용량은 1024Byte 이다 

     DataOutputStream dos = new DataOutputStream(bos);

     //출력버퍼를 데이터 출력 스트림에 담는다

     

 

      //1byte 출력을 위한 객체

      DataOutputStream dos1 = new DataOutputStream(

                                             new BufferedOutputStream(

                                                new FileOutputStream(

                                                   new File(new File("C:\\java\\work"),"shs.txt"))));

 

     //위의 데이터 출력 스트림의 담는 과정을 좀더 짧게 표현한것

 

       dos1.writeInt(23);

      //int 형 숫자를 출력한다 . 이것을 출력하면 파일에는 4byte의 영역(int이기 때문에)을 확보하고

      //데이터가 표시된다 결과에는 알아볼수없는 문자열로 표시된다 

       dos1.writeDouble(12.345);

      //double형 숫자를 출력한다, 역시 int형과 마찬가지로 8byte의 영역을 확보하고 데이터가 표시

      dos1.writeBytes("ABCDEFG!!!!");

      //1byte씩 문자 형태로 출력한다 정상적으로 보인다.

 

 

 

      dos1.close();

   }

}

 

ex 4)

 

import java.io.*;

public class Round16_Ex08 {

   public static void main (String[] ar) {

      DataInputStream dis1 = null;

     //데이터 입력 스트림 선언

      try{

         dis1 =

        new DataInputStream{

        new BufferedInputStream{

        new FileInputStream{

        new File(new File("C:\\java\\work"),"shs.txt"))));

        //데이터 입력스트림을 선언해 파일에 입력스트림을 객체에 생성한다

      }catch(FileNotFoundException fe){}

      int a = 0;

      double b = 0.0;

      byte[] c = null;

 

     try{

        a = dis1.readInt();

       //데이터 입력 스트림의 객체에서 int의 값을 읽어온다

       b = dis1.readDouble();

       //데이터 입력 스트림의 객체에서 Double값을 읽어온다

       c = new Byte[10];

       dis1.read(c);

       //데이터 입력 스트림의 객체에서 byte값의 배열[10]을 읽어온다

       dis1.close();

       //데이터 입력 스트림을 닫는다

     }catch(IOException ee){}

  

     System.out.println("a = " + a);

     System.out.println("b = " + b);

     System.out.println("c = " + new String(c));

   }

 

}





■ 2byte 출력


① 콘솔 출력용


OutputStreamWriter ows = new OutputStreamWriter(System.out);

BufferedWriter bw = new BufferedWriter(osw);

PrintWriter pw = new PrintWriter(bw);

pw.println(…);


② 파일 출력용


File file = new File("파일명");

FileWriter fw = new BufferedWriter(fw);

BufferedWriter bw = new BufferedWriter(fw);

PrintWriter pw = new PrintWriter(bw);

pw.println(…);


③ 네크워크 출력용


Socket sc = new Socket(…);

OutputStreamWriter osw = new OutputStreamWriter(soc.getOutputStream());

BufferedWriter bw = new BufferedWriter(osw);

PrintWriter pw = new PrintWriter(bw);

pw.println(…);


■ 2byte 입력


① 키보드 입력용


InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

br.readLine();


② 파일 입력용


File file = new File("파일명");

FileReader fr = new FileReader(file);

BufferedReader br = new BufferedReader(fr);

bf.readLint();


③ 네트워크 입력용


Socket soc = new Socket(…);

InputStreamReader isr = new InputStreamReader(soc.getInputStream());

BufferedReader br = new BufferedReader(isr);

br.readLine();



2byte 파일 및 화면 출력 예제

import java.io.*;


public class Ex09 {

 public static void main(String[] args) throws IOException {

  PrintWriter out = new PrintWriter(

    new BufferedWriter(

      new FileWriter(

        new File("C:\\Users\\Hindung\\Desktop\\work", "hindung.txt"))));

  PrintWriter out1 = new PrintWriter(

    new BufferedWriter(

      new OutputStreamWriter(System.out)));

  

  out.println("파일에 적는다.");

  out1.println("화면에 적는다.");

  out.close();

  out1.close();

 }

}




 


2byte 파일 입력 예제

import java.io.*;


public class Ex10 {

 public static void main(String[] args) throws IOException {

  BufferedReader in = 

   new BufferedReader(

     new FileReader(

       new File("C:\\Users\\Hindung\\Desktop\\work", "hindung.txt")));

  String data = in.readLine(); // 연결된 파일로부터 첫 번째 라인을 읽는다.

  in.close();

  System.out.println("data = " + data);

 }

}



 


원래 입출력의 대상이 되는 곳의 방향(Direction)을 바꾸는 예제

import java.io.*;


public class Ex11 {

 public static void main(String[] args) throws IOException {

  File dir = new File("C:\\Users\\Hindung\\Desktop\\work");

  File file = new File(dir, "cmh1.log");

  FileOutputStream fos = 

   new FileOutputStream(file, true);

  BufferedOutputStream bos = 

   new BufferedOutputStream(fos, 1024);

  PrintStream ps = new PrintStream(bos);

  System.setErr(ps); //System.err의 출력대상을 ps 객체가 지정하는 위치로 리디렉션(ReDirection)

  

  System.out.println("출력한다. 화면으로...");

  System.err.println("출력한다. 파일로...");

 }

}