关于JAVA没有中文字符串生成UTF-8文本文件问题

时间:2023-02-11 09:26:23
我不知道各位试过没有,随便写一个串如果没有中文的话,然后生成一个文本文件,输出要UTF-8,文件本身也是UTF-8,这样是生成不出来的,文件的格式只能是ANSI,如果这个串有中文,就能生成UTF-8的文本文件,如果没有中文,我也要生成UTF-8这样的文件,不知道各位有什么好方案,谢谢

//String str = "232352323测试rtreyreyrey";
String str = "232352323rtreyreyrey";
String fileName = "e:/jboss422GA_new/server/default/EdiSendLogFile/BSHCO/Barcode/1.txt";

// String uu = TaobaoEDIConfig.getBizEncodingStr(str);
// uu = new String(str.getBytes(), "UTF-8");
// System.out.println(uu);

// FileOutputStream fos = new FileOutputStream(fileName);
// OutputStreamWriter out = new OutputStreamWriter(fos,"UTF-8");
// BufferedWriter writer = new BufferedWriter(out);
// writer.write(new String(str.getBytes("gb2312"),"UTF-8"));
//
// if(writer!=null){
// writer.close();
// }
// if(out!=null){
// out.close();
// }
// if(fos!=null){
// fos.close();
// }
System.out.println("write finish!!");

3 个解决方案

#1



import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;
import java.io.IOException;
import java.nio.channels.FileChannel;
import static java.nio.file.StandardOpenOption.*;
import java.util.EnumSet;
import java.nio.charset.Charset;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileLock;
import static java.nio.channels.FileChannel.MapMode.*;
import java.nio.ByteBuffer;

public class Test{
public static void main(String[] args){
Path file = Paths.get(System.getProperty("user.dir")).resolve("file.bin");
try(FileChannel channel = (FileChannel) Files.newByteChannel(file,EnumSet.of(WRITE,CREATE,READ))){
FileLock lock = channel.tryLock();
String content = "Hello,It is the content want to save in file.你好,这是需要写入文件的内容(UTF)";
Charset charset = Charset.forName("UTF-8");
//以UTF-8格式将content转换成字节数组.并写入缓冲区
ByteBuffer buf = ByteBuffer.wrap(content.getBytes("UTF-8"));

channel.write(buf);
channel.position(0);
//将文件内容映射到mapBuf缓冲区中
MappedByteBuffer mapBuf = channel.map(READ_WRITE,0,channel.size());
lock.release();
channel.close();
//采用UTF-8格式获取缓冲区的内容,并转换成String
content = charset.decode(mapBuf).toString();
System.out.println(content);


}catch(IOException e){
e.printStackTrace();
return;
}
}
}

#2


二楼的亲,你这里有中文,要的是都是英文的,你试试就知道了,不好用的
“Hello,It is the content want to save in file.你好,这是需要写入文件的内容(UTF)”

#3


全英文也一样的。反正UTF-8编码写,UTF-8编码读.你可以试下.

#1



import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;
import java.io.IOException;
import java.nio.channels.FileChannel;
import static java.nio.file.StandardOpenOption.*;
import java.util.EnumSet;
import java.nio.charset.Charset;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileLock;
import static java.nio.channels.FileChannel.MapMode.*;
import java.nio.ByteBuffer;

public class Test{
public static void main(String[] args){
Path file = Paths.get(System.getProperty("user.dir")).resolve("file.bin");
try(FileChannel channel = (FileChannel) Files.newByteChannel(file,EnumSet.of(WRITE,CREATE,READ))){
FileLock lock = channel.tryLock();
String content = "Hello,It is the content want to save in file.你好,这是需要写入文件的内容(UTF)";
Charset charset = Charset.forName("UTF-8");
//以UTF-8格式将content转换成字节数组.并写入缓冲区
ByteBuffer buf = ByteBuffer.wrap(content.getBytes("UTF-8"));

channel.write(buf);
channel.position(0);
//将文件内容映射到mapBuf缓冲区中
MappedByteBuffer mapBuf = channel.map(READ_WRITE,0,channel.size());
lock.release();
channel.close();
//采用UTF-8格式获取缓冲区的内容,并转换成String
content = charset.decode(mapBuf).toString();
System.out.println(content);


}catch(IOException e){
e.printStackTrace();
return;
}
}
}

#2


二楼的亲,你这里有中文,要的是都是英文的,你试试就知道了,不好用的
“Hello,It is the content want to save in file.你好,这是需要写入文件的内容(UTF)”

#3


全英文也一样的。反正UTF-8编码写,UTF-8编码读.你可以试下.