IO 스트림 개요:
IO: 입출력(Input/Output)
Stream: 추상적인 개념이며 데이터에 대한 일반 용어입니다. 전염. . 즉, 장치 간 데이터 전송을 스트림이라고 합니다. IO 스트림은 장치 간 데이터 전송 문제를 처리하는 데 사용됩니다. 간단히 말해서 전송에 관한 모든 것은 스트림과 관련됩니다.
IO 흐름 시스템 다이어그램:
IO는 파일 작업을 포함하므로 파일 작업 기술과 분리될 수 없어야 합니다.
File 클래스는 java.io 패키지에 있습니다. 디스크 파일 자체를 나타내는 객체입니다. File 클래스는 파일 이름, 파일 경로, 액세스 권한, 수정 날짜 등과 같은 디스크 파일과 관련된 정보를 얻거나 처리하는 데 주로 사용되는 파일을 작동하는 몇 가지 메서드를 정의하며 하위 디렉터리 계층 구조를 탐색할 수도 있습니다.
File 클래스는 파일 및 파일 시스템 처리와 관련된 정보를 나타냅니다. File 클래스에는 파일에서 정보를 읽고 파일에 정보를 쓰는 기능이 없습니다. 파일 자체의 속성만 설명합니다. 따라서 읽기 및 쓰기 작업을 위해 IO와 쌍을 이룹니다.
먼저 File 클래스에서 일반적으로 사용되는 메서드의 요약 다이어그램을 살펴보세요.
createNewFile()을 사용하여 파일을 만듭니다.
public class test01 { public static void main(String[] args) throws IOException { //先建立一个File对象,并传入路径 File file1 = new File("G://abc.txt"); //创建空文件,如果没有存在则新建一个,并且返回True,如果存在了就返回false System.out.println(file1.createNewFile()); }
실행 후 디렉터리에 이 항목이 없으면 파일이 있으면 하나가 생성되고, 이미 존재하는 경우 false를 반환하여 생성이 실패했음을 나타냅니다.
mkdir()을 사용하여 디렉토리 생성:
File file2 = new File("G://a"); System.out.println(file2.mkdir()); //创建一个目录,如果没有存在则新建一个,并且返回True,如果存在了就返回false
mkdirs()를 사용하여 다중 레벨 디렉토리 생성:
File file3 = new File("G://a//b//c"); System.out.println(file3.mkdirs()); //创建多级目录,如果没有存在则新建一个,并且返回True,如果存在了就返回false
그런 다음 파일을 입력하고 출력하는 IO 스트림:
먼저 일반적으로 사용되는 네 가지 스트림을 소개합니다.
바이트 입력 스트림: InputStream
InputStream
字节输出流:OutputStream
字符输入流:Reader
字符输出流:Writer
OutputStream< /code> <p><strong></strong></p>문자 입력 스트림: <code>Reader
문자 출력 스트림:
Writer
왜 바이트와 문자라는 두 개의 스트림이 있나요?
ASCII 코드
에서는 영문자 1개(대소문자 상관없음)가 1바이트이고, 한자 1개가 2바이트입니다.UTF-8 인코딩에서 영어 단어 하나는 1바이트이고 중국어 단어 하나는 3바이트입니다.
유니코드 인코딩에서 영어 단어 하나는 1바이트이고 중국어 단어 하나는 2바이트입니다.
그래서 우리는 컴퓨터가 데이터를 하나씩 읽는다는 것을 알고 있습니다. 파일에 숫자나 영어가 포함되어 있으면 모두 1바이트를 차지하므로 정상적으로 읽을 수 있습니다.한자라면 어떨까요? 최소 2바이트 이상을 차지합니다. 한자를 나누어 읽어보면 분명 표시에 문제가 있을 것입니다.
요약:Windows와 함께 제공되는 메모장 소프트웨어를 통해 데이터를 열고 여전히 내부 내용을 읽을 수 있는 경우 문자 스트림을 사용하고, 그렇지 않으면 바이트 스트림을 사용하세요. 어떤 유형의 스트림을 사용해야 할지 모른다면 바이트 스트림을 사용하세요!
다음은 네 가지 스트림의 해당 기능에 대한 메소드 이름의 요약 표입니다.바이트 출력 스트림:
바이트 출력 스트림을 사용하여 abc.txt 파일에 문장을 씁니다. :public class test01 { public static void main(String[] args) { try{ //创建输出流对象: OutputStream fos = null; fos = new FileOutputStream("G://abc.txt"); String str = "今天的博客是IO流"; //先将需要写入的字符打散成数组: byte[] words = str.getBytes(); //使用写入的功能 fos.write(words); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
실행 후:
바이트 입력 스트림(파일에서 콘솔로 읽기): 파일에 중국어 문자가 포함되어 있고 바이트 입력 스트림을 사용하는 경우 디스플레이는 확실히 다음과 같습니다. 파일이 이제 내부에 "I love China"라는 네 단어가 있으면 다음 코드를 사용하십시오.
public class test02 { public static void main(String[] args) { //创建字节输入流对象: InputStream fis = null; try{ fis = new FileInputStream("G://abc.txt"); int data; //fis.read()取到每一个字节通过Ascll码表转换成0-255之间的整数,没有值返回-1 while((data=fis.read())!=-1){ //(char) data 将读到的字节转成对应的字符 //中文的字符是2+个字节组成 System.out.print((char) data); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try{ fis.close(); } catch (IOException e) { e.printStackTrace(); } } } }
출력 결과는 다음과 같습니다.
🎜🎜 그런 다음 파일의 정보를 영어와 숫자로 변경합니다. : 🎜🎜🎜🎜🎜 🎜🎜결론: 한자가 포함된 파일은 바이트 스트림을 사용하여 읽을 수 없습니다🎜🎜
我们使用字符输出流给abc.txt文件里面写几句话:
public class test03 { public static void main(String[] args) { try{ //使用字符输出流的FileWriter写入数据 Writer fw = new FileWriter("G://abc.txt"); fw.write("我们在学Java"); fw.write("一起加油"); fw.close(); //关闭资源 } catch (IOException e) { e.printStackTrace(); } } }
也没用问题,我们发现,使用字符流写中文汉字更方便。
可以设置缓存流提高获取值的效率:
public class test04 { public static void main(String[] args) throws IOException { //创建字符输入流对象: Reader fr = null; try{ fr = new FileReader("G:/abc.txt"); //借助字符流对象创建了字符缓存区 把字符一个一个的取到后先放到缓存区 //然后一起再读写到程序内存来,效率更高 BufferedReader br = new BufferedReader(fr); //先去缓存区一行一行的读取 String line = br.readLine(); while(line != null){ System.out.println(line); line = br.readLine(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } }
当文件内的信息为多行的时候:
字节流和字符流总结:
IO是文件的输入和输出,我们要想去对文件或者写,或者通过程序发送消息给另外的用户都要用到流。
IO流分 字节流和字符流,字节流是以字节为单位IO,字符流是以字符为单位IO;通常读写图片、视频音频等用字节 流,如果读写文件的内容比如中文建议用字符流。
위 내용은 Java의 파일 클래스 및 IO 스트림 소개 및 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!