1.读写汉字文本文件
在进行写入操作时,如果写入的文件内含有汉字,则用以下代码
public class FISRead {
public static void main(String[] args) throws IOException{
// 使用文件名称创建流对象.
FileInputStream fis = new FileInputStream("read.txt"); // read.txt文件中内容为abcde
// 定义变量,作为有效个数
int len ;
// 定义字节数组,作为装字节数据的容器
byte[] b = new byte[2];
// 循环读取
while (( len= fis.read(b))!=-1) {
// 每次读取后,把数组变成字符串打印
System.out.println(new String(b));
}
// 关闭资源
fis.close();
}
}
输出结果:
ab
cd
ed
byte[] b=new byte[]内确定的空间即为每次读取的字节数,多了或者少了都会是汉字变成乱码,所以应该先测试该电脑该编码个=格式下的汉字占多少字节
public void test1() {
String s="张";
try {
System.out.println(s.getBytes("UTF-8").clone().length);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
问题解决!
2.读写图片资源
先看图片的大小,如48.9KB,1KB=1024B,所以可以设置的稍微大一些
@Test
public void copypicture() {
File f1=new File("D:\\q.jpg");
File f2=new File("D:\\test\\copy.jpg");
try {
f2.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
FileInputStream fin=new FileInputStream(f1);
FileOutputStream fout=new FileOutputStream(f2);
byte[] b=new byte[1024*50];//这个大小影响是否能传输成功,最好大一点
int len=0;
while((len=fin.read(b))!=-1) {
fout.write(b,0,len);
fout.flush();
}
fout.close();
fin.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Junit单元测试报错
package day5;
import org.junit.Test;
public class supermaket {
final static String name="子伦超市";
final static String address="大学生创业园";
final static String phone="110";
public void welcome() {
System.out.println("物美超市欢迎你");
System.out.println("超市名:"+name);
System.out.println("超市地址:"+address);
System.out.println("电话:"+phone);
}
public void discount(double price) {
System.out.println("价格打85折:"+(price*0.85));
}
public static void main(String[] args) {
supermaket s = new supermaket();
s.discount(11);
s.welcome();
}
}
原因:测试的方法不能有返回值或者参数
3.FileOutputStream写入数据覆盖问题
实例化对象的时候添加true参数(默认为false,表示覆盖)
FileOutputStream fout=new FileOutputStream(f,true);