首页上一页 1 下一页尾页 1 条记录 1/1页
关于Java入门经典中11.6实例的问题
发表在Java图书答疑
2015-08-02
是否精华
是
否
版块置顶:
是
否
public class FileInAndOut {
private static String filepath="./123.txt";
private static File file=new File(filepath);
private static int runCount=0; //程序运行次数
private static String date=String.format("%tF%<tT",new Date()); //上次运行时间
private static String os=System.getProperty("os.name");//上次运行程序的操作系统
private static String dataStr="";
public static void main(String[] args){
loadConfig();
if(dataStr.isEmpty()){
System.out.println("这是第一次运行,其他程序还没有初始化!");
}
else{
System.out.println("程序已经运行了"+(runCount+1)+"次了。");
System.out.println("程序上次运行的时间是:"+date);
System.out.println("上次运行的操作系统是:"+os);
}
putConfig();
}
public static void loadConfig(){
try{
if(!file.exists())
file.createNewFile();
byte[] data=new byte[64];
FileInputStream fis=new FileInputStream(file);
int rs=0;
while((rs=fis.read(data))>0){
dataStr+=new String(data,0,rs);
}
if(!dataStr.isEmpty()){
String[] sets=dataStr.split(",");
runCount=Integer.parseInt(sets[0]);
date=sets[1];
os=sets[2];
}
fis.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static void putConfig(){
String dataStr;
try{
if(!file.exists())
file.createNewFile();
dataStr=(runCount+1)+","+date+","+os;
byte[] data=dataStr.getBytes();
FileOutputStream fout=new FileOutputStream(file);
fout.write(data);
fout.flush();
fout.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
代码如上,有两处不懂。
(1)private static String date=String.format("%tF%<tT",new Date()); //上次运行时间 这边为什么要加一个小于号。树上没有类似的介绍(也没百度到)。
(2)while((rs=fis.read(data))>0){
dataStr+=new String(data,0,rs);
}
这个代码段不理解,请求讲解一下。谢谢。
------------------------------------------分 隔 线------------------------------------------------
额外我还想问个问题,在输入输出流中,字符和字节的区别在哪里?(我查过关于字节和字符的区别了,这个我知道.我想问的是,他们原理我不是很懂)。还有,哪些用字节流输入输出要效率高,哪些用字符流输入输出效率高?
举个例子:
try{
byte[] bs=new byte[50];
int i=is.read(bs); //i是用来干嘛的?
System.out.println("输出:"+new String(bs).trim());
System.out.println(i);
is.close();
}catch(IOException e){
e.printStackTrace();
}
在这个代码段,我们用的是字节流,我看书上(api上)写的是从当前数据流中读取一个字节。那为什么会把我所有输入的内容全部读取给byte数组呢?这边也没循环语句啊?
private static String filepath="./123.txt";
private static File file=new File(filepath);
private static int runCount=0; //程序运行次数
private static String date=String.format("%tF%<tT",new Date()); //上次运行时间
private static String os=System.getProperty("os.name");//上次运行程序的操作系统
private static String dataStr="";
public static void main(String[] args){
loadConfig();
if(dataStr.isEmpty()){
System.out.println("这是第一次运行,其他程序还没有初始化!");
}
else{
System.out.println("程序已经运行了"+(runCount+1)+"次了。");
System.out.println("程序上次运行的时间是:"+date);
System.out.println("上次运行的操作系统是:"+os);
}
putConfig();
}
public static void loadConfig(){
try{
if(!file.exists())
file.createNewFile();
byte[] data=new byte[64];
FileInputStream fis=new FileInputStream(file);
int rs=0;
while((rs=fis.read(data))>0){
dataStr+=new String(data,0,rs);
}
if(!dataStr.isEmpty()){
String[] sets=dataStr.split(",");
runCount=Integer.parseInt(sets[0]);
date=sets[1];
os=sets[2];
}
fis.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static void putConfig(){
String dataStr;
try{
if(!file.exists())
file.createNewFile();
dataStr=(runCount+1)+","+date+","+os;
byte[] data=dataStr.getBytes();
FileOutputStream fout=new FileOutputStream(file);
fout.write(data);
fout.flush();
fout.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
代码如上,有两处不懂。
(1)private static String date=String.format("%tF%<tT",new Date()); //上次运行时间 这边为什么要加一个小于号。树上没有类似的介绍(也没百度到)。
(2)while((rs=fis.read(data))>0){
dataStr+=new String(data,0,rs);
}
这个代码段不理解,请求讲解一下。谢谢。
------------------------------------------分 隔 线------------------------------------------------
额外我还想问个问题,在输入输出流中,字符和字节的区别在哪里?(我查过关于字节和字符的区别了,这个我知道.我想问的是,他们原理我不是很懂)。还有,哪些用字节流输入输出要效率高,哪些用字符流输入输出效率高?
举个例子:
try{
byte[] bs=new byte[50];
int i=is.read(bs); //i是用来干嘛的?
System.out.println("输出:"+new String(bs).trim());
System.out.println(i);
is.close();
}catch(IOException e){
e.printStackTrace();
}
在这个代码段,我们用的是字节流,我看书上(api上)写的是从当前数据流中读取一个字节。那为什么会把我所有输入的内容全部读取给byte数组呢?这边也没循环语句啊?