之所以考虑到把这块写上是因为需求中经常会让你用某些特殊符号作为数据文件的分隔符,所以在这里简单做下总结。
一般的数据抽取文件格式为 :
广东省|深圳市|彩铃注册人次数|彩铃计费人次数
广东省|深圳市|1000|2000
其中以"|" 为分隔符。
这样就可以有两种写法:
1. 直接输入 |
2. 查看UltraEdit 中的 ASCII对照表, 用char强转10进制数例如:(char)124
但有个头疼的问题:那就是char只能强转ASCII 中 0到 127的数字,128以上就不好用了,华为那边还很喜欢用128对应的欧元符号作为分隔符,这样以上两种就都不好用了。前提是所有输出都还点用GBK编码,不能用unicode ,问题是GBK字符集根本就不支持欧元符号。
为了开拓思路索性把unicode的实现方法写上,代码如下:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
public class AA {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String fileSeprator1 = null;
// try {
// fileSeprator1 = new String(new String("/u20AC").getBytes("UTF-8"));
fileSeprator1 = new String("/u20AC");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
char fileSeprator2 = (char)128;
try {
File f = new File("d:/1.txt");
if(!f.exists()) {
f.createNewFile();
}
// FileWriter fw = new FileWriter(f);
BufferedWriter fw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f),"UTF-8"));
fw.write("20090815" + fileSeprator1+"哇咔咔" + fileSeprator1 + "哦YEE");
fw.write("/r/n");
fw.write("20090840" + fileSeprator1+"ccc" + fileSeprator1 + "ddd");
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(fw!= null) {
fw.close();
}
}
System.out.println(" create success ");
System.err.println(" 分隔符 fileSeprator1 为 :" + fileSeprator1);
System.err.println(" 分隔符 fileSeprator2 为 :" + fileSeprator2);
}
}
超级通用的办法还是用16进制的方式,代码如下:
package test;
import java.io.File;
import java.io.FileOutputStream;
public class Testq {
public static void main(String[] arg){
FileOutputStream fos = null;
File myFile = new File("D://test.txt");
byte[] b = {(byte)0x80,(byte)0x0d,(byte)0x0a
};
b[0] = (byte)0x80;
try{
if (!myFile.exists()) {
myFile.createNewFile();
}
fos = new FileOutputStream(myFile);
fos.write("20090515".getBytes());
fos.write(b,0,1);
fos.write("a中国".getBytes());
fos.write(b,1,2);
fos.write("20090516".getBytes());
fos.write(b,0,1);
fos.write("aaaaaaa中国".getBytes());
fos.write(b,1,2);
}
catch (Exception e) {
e.printStackTrace();
} finally{
if(fos != null) {
fos.close();
}
}
}
}