java BufferedReader到BufferedWriter生成空文件
我正在尝试将ansii(拉丁语-5)文本文件转换为目录中的utf-8文本文件。我做了一个小技巧来理解文件是ansii还是utf-8,但是当我尝试将ansii文件更改为utf-8时,程序会删除文本中的所有值。我哪里做错了 提前谢谢 这是我的密码:java BufferedReader到BufferedWriter生成空文件,java,character-encoding,Java,Character Encoding,我正在尝试将ansii(拉丁语-5)文本文件转换为目录中的utf-8文本文件。我做了一个小技巧来理解文件是ansii还是utf-8,但是当我尝试将ansii文件更改为utf-8时,程序会删除文本中的所有值。我哪里做错了 提前谢谢 这是我的密码: package altyazi; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputSt
package altyazi;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Paths;
public class operation{
public static int howmany =0;
public static int howmanysmalli=0;
public static double ratio;
File myFile;
public static void koddegıstır(String myfile) throws IOException{
File file = new File(myfile);
byte[] bytesArray = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(bytesArray);
fis.close();
int[] freqs = new int[256];
for(byte b: bytesArray){
freqs[b&0x0ff]++;
}
howmany = freqs[107]+freqs[75];
howmanysmalli=freqs[253];
System.out.println("Character \"k\" appears " + howmany +" times in the text "+myfile);
ratio = (double)howmany/(double)bytesArray.length;
System.out.println("How many: "+howmany);
System.out.println("Length: "+bytesArray.length);
System.out.println("Ratio: "+ratio);
//Cp1254
if(ratio<0.01){
System.out.println("Text file is probably not turkish");
}else{
System.out.println("Text file is probably turkish");
if(howmanysmalli>20){
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(myfile),
"ISO-8859-9"));
Writer out = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(
myfile), "UTF-8"));
try {
while ((line = br.readLine()) != null) {
out.write(line);
out.write("\n");
}
} finally {
br.close();
out.close();
}
}else{
System.out.println("Passed as utf-8");
}
}
}
}
package-altyazi;
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.io.OutputStreamWriter;
导入java.io.Writer;
导入java.nio.file.Files;
导入java.nio.file.path;
公营课运作{
公共静态int多少=0;
公共静态int howmanismalli=0;
公共静态双重比率;
文件myFile;
公共静态无效koddegıstır(字符串myfile)引发IOException{
文件文件=新文件(myfile);
byte[]bytesArray=新字节[(int)file.length()];
FileInputStream fis=新的FileInputStream(文件);
fis.read(字节数组);
fis.close();
int[]freqs=新int[256];
for(字节b:字节数组){
频率[b&0x0ff]+;
}
多少个=频率[107]+频率[75];
Howmanismalli=频率[253];
System.out.println(“字符\“k\”在文本“+myfile”中出现“+howth+”次);
比率=(double)多少/(double)字节数组.length;
System.out.println(“多少:+多少”);
System.out.println(“长度:“+bytesArray.Length”);
System.out.println(“比率:”+比率);
//Cp1254
如果(比率20){
弦线;
BufferedReader br=新的BufferedReader(新的InputStreamReader(
新文件输入流(myfile),
“ISO-8859-9”);
Writer out=新的BufferedWriter(
新OutputStreamWriter(新文件OutputStream(
我的文件),“UTF-8”);
试试{
而((line=br.readLine())!=null){
写出(行);
输出。写入(“\n”);
}
}最后{
br.close();
out.close();
}
}否则{
System.out.println(“作为utf-8传递”);
}
}
}
}
创建文件输出流时,您正在覆盖文件。这将创建一个空文件。您需要写入新文件,删除旧文件,完成后重命名新文件。创建文件输出流时,您正在覆盖该文件。这将创建一个空文件。您需要写入一个新文件,删除旧文件,完成后重命名新文件。似乎您没有刷新bufferedwriter。out.flush()@SouravGulati他正在关闭它,这意味着刷新。newfileoutputstream(myfile)
您正在破坏输入文件,而不是刷新缓冲写入程序。out.flush()@SouravGulati他正在关闭它,这意味着刷新。newfileoutputstream(myfile)