자바 문자 흐름 처리 2
java. io. PrintWriter 는 기능 적 으로 PrintStream 과 유사 하 며, OutputStream 인 스 턴 스 를 변수 로 받 아들 이 는 것 외 에 PrintWriter 대상 을 출력 대상 으로 받 아들 일 수 있 습 니 다.원래 Writer 대상 을 사용 하여 문자 처 리 를 하고 있 었 는데, 지금 은 println () 같은 방법 을 사용 하려 고 할 때 PrintWriter 를 사용 하 는 것 이 비교적 편리 한 방법 입 니 다.
범례 는 PrintStream 과 PrintWriter 두 대상 이 같은 출력 목적 을 처리 할 때 사용 하 는 방법 을 보 여 줍 니 다. 프로그램 은 중국어 GB 2312 인 코딩 된 문 자 를 지정 한 파일 로 출력 합 니 다.
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
public class StreamWriterDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
// "简体中文"四个字的GB2312编码
byte[] sim = { (byte) 0xbc, (byte) 0xf2, (byte) 0xcc, (byte) 0xe5,
(byte) 0xd6, (byte) 0xd0, (byte) 0xce, (byte) 0xc4 };
// 数组作为流来源
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
sim);
InputStreamReader inputStreamReader = new InputStreamReader(
byteArrayInputStream, "GB2312");
// PrintWriter还接受writer实例作为变量
PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(
new FileOutputStream(args[0]), "GB2312"));
int in = 0;
printWriter.print("PrintWriter:");
// 写入数组内容
while ((in = inputStreamReader.read()) != -1) {
printWriter.print((char) in);
}
printWriter.println();
printWriter.close();
byteArrayInputStream.reset();
// PrintWriter 接受OutpuStream实例作为变量
PrintStream printStream = new PrintStream(new FileOutputStream(
args[0], true), true, "GB2312");
printStream.print("PrintStream:");
// 写入数组数据
while ((in = inputStreamReader.read()) != -1) {
printStream.print((char) in);
}
printStream.println();
printStream.close();
inputStreamReader.close();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("没有找到文件");
} catch (IOException e) {
e.printStackTrace();
}
}
}
CharArray Reader 와 CharArray Writer.
java. io. CharArray Reader 와 java. io. CharArray Writer 를 사용 하면 문자 배열 을 문자 데이터 로 출력 하거나 입력 할 수 있 습 니 다.
예 를 들 어, 일반적으로 텍스트 파일 에 대해 무 작위 로 접근 하 는 동작 을 하지 않 습 니 다. ASCII 와 호 환 되 려 면, 한 텍스트 파일 에 ASCII 와 비 서구 어족 의 두 바이트 문자 가 있 을 수 있 습 니 다.즉, 텍스트 파일 에서 영문 문 자 는 중국어 문자 와 길이 가 다 르 기 때문에 텍스트 파일 을 무 작위 로 액세스 하면 오류 가 발생 하기 쉽다.
자바 의 문 자 는 유 니 코드 문자 이기 때문에 이 기능 을 통 해 텍스트 파일 의 내용 을 문자 배열 에 읽 고 문자 배열 에 무 작위 로 액세스 한 다음 파일 에 다시 쓸 수 있 습 니 다.이렇게 하면 텍스트 파일 에 도 랜 덤 액세스 와 유사 한 기능 을 할 수 있다.
범례 는 간단 한 영어 와 중국어 문자 가 있 는 간단 한 텍스트 파일 을 열 수 있 습 니 다.파일 을 읽 은 후에 프로그램 으로 텍스트 파일 의 문자 위 치 를 지정 하여 지정 한 문 자 를 수정 할 수 있 습 니 다.프로그램의 방법 은 문 자 를 문자 배열 에 읽 고 지정 한 색인 에 있 는 배열 요 소 를 수정 하 는 것 입 니 다.배열 내용 을 수정 한 후에 문자 배열 을 다시 파일 에 저장 합 니 다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class CharArrayReaderWriterDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
File file = new File(args[0]);
BufferedReader bufInputReader = new BufferedReader(new FileReader(
file));
// 将文件读入字符数组
CharArrayWriter charArrayWriter = new CharArrayWriter();
char[] array = new char[1];
while (bufInputReader.read(array) != -1) {
charArrayWriter.write(array);
}
charArrayWriter.close();
bufInputReader.close();
// 显示字符数组内容
array = charArrayWriter.toCharArray();
for (int i = 0; i < array.length; i++)
System.out.println(array[i] + " ");
System.out.println();
// 让用户输入位置与字符修改内容
Scanner scanner = new Scanner(System.in);
System.out.print("输入修改位置:");
int pos = scanner.nextInt();
System.out.print("输入修改字符:");
char ch = scanner.next().charAt(0);
array[pos - 1] = ch;
// 将字符数内容存回文件
CharArrayReader charArrayReader = new CharArrayReader(array);
BufferedWriter bufwriter = new BufferedWriter(new FileWriter(
args[0]));
char[] tmp = new char[1];
while (charArrayReader.read(tmp) != -1) {
bufwriter.write(tmp);
}
charArrayReader.close();
bufwriter.flush();
bufwriter.close();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("文件未找到");
} catch (IOException e) {
e.printStackTrace();
}
}
}
PushbackReader
PushbackReader 는 PushBack 버퍼 를 가지 고 있 습 니 다. PushbackReader 가 처리 하 는 것 은 문자 일 뿐 입 니 다.이 대상 에서 데 이 터 를 읽 은 후 원한 다 면 PushBack 버퍼 가 가득 차지 않 으 면 unread () 를 사용 하여 데 이 터 를 되 돌 릴 수 있 습 니 다.
범례 는 텍스트 파일 중의 일부 수학 기 호 를 <, >, < =, > =,! =, =BIG 5 코드 중의 <, >, ≤, ≥, ≠, = 등 전각 기호 로 전환 하고 새 파일 을 따로 저장 합 니 다.
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PushbackReader;
public class PushbackReaderDemo {
public static void main(String args[]) {
char[] symbols = { '<', '>', '≦', '≧', '≠', '=' };
try {
PushbackReader pushbackReader = new PushbackReader(new FileReader(
args[0]));
FileWriter fileWriter = new FileWriter("D:\\math_abc.txt");
int c = 0;
while ((c = pushbackReader.read()) != -1) {
int poss = -1;
switch (c) {
case '<':
poss = 0;
break;
case '>':
poss = 1;
break;
case '!':
poss = 2;
break;
case '=':
poss = 5;
break;
default:
fileWriter.write(c);
}
if (poss != -1) {
if ((c = pushbackReader.read()) == '=') {
fileWriter.write(symbols[poss + 2]);
} else {
pushbackReader.unread(c);
fileWriter.write(symbols[poss]);
}
}
}
pushbackReader.close();
fileWriter.close();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("指定文件");
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.