java 如何写入一个固定长度字节数的字符串

晋儿 2016-08-07 11:50:16
比如我想创建一个数据文件记录姓名的
因为名字长度不一样,但16个字节绝对够了
怎样才能用固定16个字节保存每一个姓名?
比如“张三”,“马文才”,“司马相如”这三个名字长都都不一样
怎样才能用固定16个字节分别保存每一个姓名,并且用dataoutputstream写入到一个二进制文件中,然后再从文件中读出来。
最好写个例子。
这里高手多,期待大神解答
...全文
621 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickylin86 2016-08-08
  • 打赏
  • 举报
回复

import java.nio.file.Paths;
import java.nio.file.Path;
import java.nio.file.Files;
import static java.nio.file.StandardOpenOption.*;

import java.io.DataOutputStream;
import java.io.DataInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedInputStream;
import java.io.IOException;

import java.util.ArrayList;


public class Test{
	public static void main(String[] args){
		String name1 = "张三";
		String name2 = "马文才";
		String name3 = "司马相如";
		
		
		name1 = process(name1);
		name2 = process(name2);
		name3 = process(name3);

		System.out.println("处理后名字为:");
		System.out.printf("'%s'\n'%s'\n'%s'\n",name1,name2,name3);

		System.out.println("将名字写入文件.");
		writeNames(name1,name2,name3);

		System.out.println("从文件中读取姓名...");
		ArrayList<String> names = readNames();

		System.out.println("输出文件中的姓名 ...");
		for(String name : names){
			System.out.printf("'%s'\n",name);
		}
	}

	private static String process(String name){
		int fixed = 16;
		int enSpace = 16 - name.getBytes().length;
		return String.format("%" + enSpace + "s","") + name;
	}

	private static void writeNames(String ... names){

		try{
			Files.deleteIfExists(path);
		}catch(IOException e){
			e.printStackTrace();
			System.exit(1);
		}

		try(DataOutputStream out = new DataOutputStream(
										new BufferedOutputStream(
											Files.newOutputStream(path,WRITE,CREATE)));){
			byte[] bs = null;
			for(String name : names){
				bs = name.getBytes();
				out.write(bs,0,bs.length);
			}
		}catch(IOException e){
			e.printStackTrace();
			System.exit(1);
		}
	}

	private static ArrayList<String> readNames(){
		ArrayList<String> names = new ArrayList<>();
		try(DataInputStream in = new DataInputStream(
									new BufferedInputStream(
										Files.newInputStream(path,READ)));){
			byte[] bs = new byte[16];
			while(in.read(bs) != -1){
				names.add(new String(bs));
			}
		}catch(IOException e){
			e.printStackTrace();
			System.exit(1);
		}
		return names;
	}

	private static Path path = Paths.get(System.getProperty("user.dir")).resolve("data.bin");
}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧