重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你好,java的API中提供了用于对象输入输出文件的操作,实例代码如下:
创新互联是一家集网站建设,安乡企业网站建设,安乡品牌网站建设,网站定制,安乡网站建设报价,网络营销,网络优化,安乡网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
定义单词类如下(注意:你定义的类要实现Serializable接口)
public class Words implements Serializable {
private int size;
private String[] words;
public Words(){};
public Words(String...strs){
this.words = strs;
this.size = strs.length;
}
@Override
public String toString() {
return "Words{" +
"size=" + size +
", words=" + Arrays.toString(words) +
'}';
}
}
2. 对象输入输出api测试类
public class ObjIOTest {
public static void main(String[] args) {
String path = "d:/myIOTest.txt";
ObjIOTest objIOTest = new ObjIOTest();
Words words = new Words("hello", "my", "dear", "friend");
try {
objIOTest.writeObject(path,words);
Words wordsFromFile = (Words)objIOTest.readObject(path);
System.out.println(wordsFromFile.toString());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
//java serialize a object to file
public void writeObject(String path,Object map) throws IOException{
File f=new File(path);
FileOutputStream out=new FileOutputStream(f);
ObjectOutputStream objwrite=new ObjectOutputStream(out);
objwrite.writeObject(map);
objwrite.flush();
objwrite.close();
}
// read the object from the file
public Object readObject(String path) throws IOException, ClassNotFoundException{
FileInputStream in=new FileInputStream(path);
ObjectInputStream objread=new ObjectInputStream(in);
Object map=objread.readObject();
objread.close();
return map;
}
}
把两段代码拷贝到一个包下即可运行了,希望您的问题得到解答
/**
* 读写指定文件或者读写指定某一个文件夹下的全部文件(不包括文件夹)
* @throws Exception
*/
public static void moveFile() throws Exception {
Scanner scan = new Scanner(System.in);
System.out.println("请输入源路径:");//输入源文件地址,可以是文件夹,可以是具体某个文件
String uDisk = scan.nextLine();
File file = new File(uDisk);//获得读取文件
if ((file.exists())) {//当文件存在
System.out.println("请输入目标路径:");//文件复制目标路径
String targetFolder = scan.nextLine();
File target = new File(targetFolder);//获得写入文件
if (!target.exists()) {
if (!target.mkdir()) {
throw new Exception("创建目标目录失败");
}
} else if (!target.isDirectory()) {
throw new Exception("与目标目录同名的文件已经存在");
}
File[] temp = null;
if(file.listFiles()==null || file.listFiles().length=0){
temp=new File[]{file};//输入的源路径指定文件,将文件添加到文件数组中
}else{
temp = file.listFiles();//如果输入的源路径是文件夹,则获取文件夹下文件的个数
}
if ((temp != null) (temp.length 0)) {//文件数组temp有值
int i = 0;
for (int length = temp.length; i length; i++) {//循环文件数组
if (!temp[i].isDirectory()) {
String fileName = temp[i].getName();
File t = new File(targetFolder + File.separator
+ fileName);//创建输出文件
if (!t.createNewFile()) {
throw new Exception("创建输出文件失败");
}
FileOutputStream out = new FileOutputStream(t);//创建文件输出流
FileInputStream in = new FileInputStream(temp[i]);//创建文件输入流
byte[] buffer = new byte[256];
while (in.read(buffer) 0) {//循环输入流,直到输入流无数据
out.write(buffer);//写入文件
}
}
}
}
}
}
调用例子:
public static void main(String[] args) throws Exception {
moveFile();
}
呃,时隔几年,不知道你解决问题没有。首先应该明白,System.out.println(OBJ)会自动调用OBJ.toString()方法。查阅官方文档表示,ByteArrayInputStream类中重写了toString( )方法,Converts the buffer's contents into a string decoding bytes using the platform's default character set.即 “使用平台的默认字符集将缓冲区的内容转换为字符串解码字节。
但是 FileOutputStream类中并未重写toString( ) 。使用的是从Object类中继承下来的。所以你能看到 obj@xxx 格式的输出。