System.currentTimeMillis() 设置安卓系统时间 && Timer和TimerTask && java的File相关 && java的IO相关
来源:互联网 发布:eclipse中创建js页面 编辑:程序博客网 时间:2024/05/22 14:43
System.currentTimeMillis():产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数。常见作用:一般都是用2个时间的差值来得到运行时间。比如:
long start = System.currentTimeMillis();
// 这里可以加上你要运行的内容
long end = System.currentTimeMillis();
System.out.println("运行时间:"+(end - start));
(1)该函数示例如下:
import java.text.SimpleDateFormat; //格式化输出import java.util.Locale;public class TestNew {public static void main(String[] args)throws InterruptedException {// TODO Auto-generated method stubSimpleDateFormat sdf = new SimpleDateFormat("",Locale.SIMPLIFIED_CHINESE);sdf.applyPattern("yyyy年MM月dd日 HH时mm分ss秒");System.out.println(sdf.format(System.currentTimeMillis()));<span style="font-family:Arial, Helvetica, sans-serif;">//</span><span style="font-family: Arial, Helvetica, sans-serif;">sdf.format可用String.valueOf转成字符串输出到UI上</span>System.out.println(System.currentTimeMillis());}}
输出即是
2013年01月10日 10时54分14秒
1357786454640
System.currentTimeMillis的值与java.util.Calendar.getInstance().getTimeInMillis()是一样的。
(2)获取当前时间,安卓系统提供了两种方法:SystemClock.uptimeMillis 和 System.currentTimeMillis,这两种方法有何区别呢?1. SystemClock.uptimeMillis() // 从开机到现在的毫秒数(手机睡眠的时间不包括在内);2. System.currentTimeMillis() // 从1970年1月1日 UTC到现在的毫秒数;我们多用第二种。
注意System类没有设置UTC时间的子函数,倒是安卓的类SystemClock(base\core\java\android\os\SystemClock.java)是有这个子函数的setCurrentTimeMillis。所以我们需要更新系统时间的时候,用它就可以。这个是在上层设置,如果需要在内核层设置时间,方法是在RTC驱动设置时间的地方,可以如下修改,也可以修改RTC中有个default值的地方。
seconds = rtc_read_time();printk("init PMU/RTC time to %ld \n", seconds);if(seconds <= 1325402913) {seconds = 1325402913;/*2012-01-01*/ret = rtc_set_time(seconds);RTC_DBG("Init Set time: %ld, ret =0x%x\n", seconds, ret);}
(3)时区对时间的影响。示例1中没有时区,很多时候时间是跟时区关联的,TimeZone类。
DateFormat dateFormatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");TimeZone pst = TimeZone.getTimeZone("Etc/GMT-0");Date curDate = new Date(); dateFormatter.setTimeZone(pst);System.out.println(dateFormatter.format(curDate));
显示2016-05-12 14:22:13。如果改GMT-8,则是本地北京时间,比GMT-0快8个小时。所以GMT-0时间的秒数,加上28800即是北京时间的秒数。
(4)获得日期时间独立的年/月/日/时/分/秒的值
要获得以上值,有两种方法。用java的类Calendar
Calendar calendar = Calendar.getInstance();String created = calendar.get(Calendar.YEAR) + "年"+ (calendar.get(Calendar.MONTH)+1) + "月"//从0计算+ calendar.get(Calendar.DAY_OF_MONTH) + "日"+ calendar.get(Calendar.HOUR_OF_DAY) + "时"+ calendar.get(Calendar.MINUTE) + "分"+calendar.get(Calendar.SECOND)+"s";Log.e("msg", created);或者android的类Time
Time t=new Time(); // or Time t=new Time("GMT+8"); 加上Time Zone资料。 t.setToNow(); // 取得系统时间。 String time=t.year+"年 "+(t.month+1)+"月 "+t.monthDay+"日 "+t.hour+"h "+t.minute+"m "+t.second; Log.e("msg", time);
CharSequence sysTimeStr; if (DateFormat.is24HourFormat(context)) { sysTimeStr = DateFormat.format("HH:mm", t.toMillis(false));} else { sysTimeStr = DateFormat.format("hh:mm", t.toMillis(false));}===============================================================================================================
JAVA中也有类似VC中的定时执行函数,分别是定时器Timer、定时器任务TimerTask,两者组合起来使用。示例如下:
import java.util.Timer;import java.util.TimerTask;public class TestNew {static TimerTask task = new TimerTask(){ public void run(){System.out.println("schedule run");}};/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("main run");Timer timer = new Timer();timer.schedule(task, 5000);}}
定义了一个定时器任务,里面必须完成抽象函数run。定时器在5秒后调度执行定时器任务。如上执行结果是:
main run
schedule run
其实timer.schedule的原型是timer.schedule(new MyTask, time0, time1);第一个参数是要执行的TimerTask;第二个参数时间间隔,要等待多长时间才可以第一次执行 run() 方法;第三个参数则是循环时间差,从第二次开始每隔多长时间执行一次run方法。
=========================================================================================================================
文件(File)是 最常见的数据源之一,在程序中经常需要将数据存储到文件中,例如图片文件、声音文件等数据文件,也经常需要根据需要从指定的文件中进行数据的读取。绝对路径是指书写文件的完整路径,例如d:\java\Hello.java,相对路径是指书写文件的部分路径,例如\test\Hello.java,该路径中只包含文件的部分路径\test和文件的全名Hello.java,使得文件路径产生一定的灵活性。
由于’\’是Java语言中的特殊字符,所以在代码内部书写文件路径时,例如代表“c:\test\java\Hello.java”时,需要书写成“c:\\test\\java\\Hello.java”
(1)java.io包中设计了一个专门的类——File类。在File类中包含了大部分和文件操作的功能方法,该类的对象可以代表一个具体的文件或文件夹
A,下面是创建的文件对象示例,public File(String pathname),例如:
File f1 = new File(“d:\\test\\1.txt”);
File f2 = new File(“1.txt”);
File f3 = new File(“e:\\abc”);
这里的f1和f2对象分别代表一个文件,f1是绝对路径,而f2是相对路径,f3则代表一个文件夹。也可以使用父路径和子路径结合,实现代表文件路径,例如:File f4 = new File(“d:\\test\\”,”1.txt”);这样代表的文件路径是:d:\test\1.txt。
B,File类常用方法
createNewFile:public boolean createNewFile() throws IOException,该方法只能用于创建文件,不能用于创建文件夹,且文件路径中包含的文件夹必须存在。
delect:public boolean delete(),该方法的作用是删除当前文件或文件夹。如果删除的是文件夹,则该文件夹必须为空。
exists:public boolean exists(),该方法的作用是判断当前文件或文件夹是否存在。
getAbsolutePath:public String getAbsolutePath(),该方法的作用是获得当前文件或文件夹的绝对路径。
getName:public String getName(),该方法的作用是获得当前文件或文件夹的名称。
getParent:public String getParent(),该方法的作用是获得当前路径中的父路径。
isDirectory:public boolean isDirectory(),该方法的作用是判断当前File对象是否是目录。
isFile:public boolean isFile(),该方法的作用是判断当前File对象是否是文件。
length:public long length(),该方法的作用是返回文件存储时占用的字节数。该数值获得的是文件的实际大小,而不是文件在存储时占用的空间数。
mkdir:public boolean mkdir(),该方法的作用是创建当前路径下的文件夹,而不创建该路径中的其它文件夹。假设d盘下只有一个test文件夹,则创建d:\test\abc文件夹则成功,如果创建d:\a\b文件夹则创建失败,因为该路径中d:\a文件夹不存在。
mkdirs:public boolean mkdirs(),该方法的作用是创建文件夹,如果当前路径中包含的父目录不存在时,也会自动根据需要创建。
flush:输出流类似于一根管道,输出的时候先放到管道里,然后管道满了存到介质上,当我们输出完后管道里面可能还有剩余,就用flush()清空管道全部存到介质上。
list:输出某个文件夹下的文件名列表。比如:File file = new File("/data/app/");String[] files = file.list();
(2)用实例说明File常用函数
public static void main(String[] args) {File f1 = new File("d:\\test");File f2 = new File("1.txt");File f3 = new File("d:\\file.txt");File f4 = new File("d:\\","1.txt");try{boolean b = f3.createNewFile();}catch(Exception e){e.printStackTrace();}System.out.println(f4.exists());System.out.println(f3.getAbsolutePath());System.out.println(f3.getName());System.out.println(f3.getParent());System.out.println(f1.isDirectory());System.out.println(f3.isFile());System.out.println(f3.length());System.out.println(" ");//空行File f6 = new File("d:\\test\\abc");boolean b1 = f6.mkdir();System.out.println(b1);b1 = f6.mkdirs();System.out.println(b1);}运行结果:
false
d:\file.txt
file.txt
d:\
true
true
0
false
true
说明:f4.exists()为false,因为new File只是新建了一个路径对象,并没有文件实体,除非用createNewFile。f3.getAbsolutePath()可以得到正确的路径,因为它是创建过的。f3.getName()就是返回文件名file.txt。f3.getParent()返回该文件的父目录,为d:\。f1.isDirectory()返回f1是否是目录,很显然没有跟后缀名的肯定是目录。f3.isFile()返回是否是文件,这个文件已经创建成功了,为true。f3.length()返回文件长度,目前没有写任何内容,所以是0。f6.mkdir()返回失败,因为首先d的test目录就不存在,更不用说去创建abc目录,f6.mkdirs()返回true,因为它可以一起多目录创建。
====================================================================================================
Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串;而字节流处理单元为 1 个字节,操作字节和字节数组。类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换(在(3)演示,(1)(2)实现同样的功能不过做法不同)。
字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。
综合起来,以字节为导向是stream系列,包括输入和输出,如下:
以字符为导向的是Reader/Writer系列,包括输入和输出,如下:
(1)将文件中的数据读入程序,是将程序外部的数据传入程序中,应该使用输入流——InputStream或Reader。而由于读取的是特定的数据源——文件,则可以使用输入对应的子类FileInputStream或FileReader实现。在Java语言的IO编程中,读取文件是分两个步骤:1、将文件中的数据转换为流,2、读取流内部的数据。其中第一个步骤由系统完成,只需要创建对应的流对象即可,对象创建完成以后步骤1就完成了,第二个步骤使用输入流对象中的read方法即可实现了。
public static void main(String[] args) {// TODO Auto-generated method stubFileInputStream fis = null; try{ //创建流对象 fis = new FileInputStream("d:\\file.txt"); //将读取到的数据存储到数组中 byte[] data = new byte[1024]; //数据存储的数组 int i = 0; //当前下标 //读取流中的第一个字节数据 int n = fis.read(); //依次读取后续的数据 while(n != -1){ //未到达流的末尾 //将有效数据存储到数组中 data[i] = (byte)n; //下标增加 i++; //读取下一个字节的数据 n = fis.read(); } //将数组构建成字符串,解析数据 String s = new String(data,0,i); //输出字符串 System.out.println(s); }catch(Exception e){ e.printStackTrace(); }finally{ try{ //关闭流,释放资源 fis.close(); }catch(Exception e){} }}
上面循环读取文件数据到数组的过程,其实可以用一句话来代替int i = fis.read(data);返回的i则是真实读取的个数。
当然,在读取文件时,也可以使用Reader类的子类FileReader进行实现,在编写代码时,只需要将上面示例代码中的byte数组替换成char数组即可。使用FileReader读取文件时,是按照char为单位进行读取的,所以更适合于文本文件的读取,而对于二进制文件或自定义格式的文件来说,还是使用FileInputStream进行读取,方便对于读取到的数据进行解析和操作。
(2)在向文件中输出数据,也就是写文件时,使用对应的文件输出流,包括FileOutputStream和FileWriter两个类,下面以FileOutputStream为例子说明输出流的使用。示例代码如下:
public static void main(String[] args) { String s = "Java语言"; int n = 100; //声明流对象 FileOutputStream fos = null; try{ //创建流对象 fos = new FileOutputStream("d:\\out.txt"); //转换为byte数组 byte[] b1 = s.getBytes(); //换行符 byte[] b2 = "\r\n".getBytes(); byte[] b3 = String.valueOf(n).getBytes(); //依次写入文件 fos.write(b1); fos.write(b2); fos.write(b3); } catch (Exception e) { e.printStackTrace(); }finally{ try{ fos.close(); }catch(Exception e){} }}
该示例代码写入的文件使用记事本打开以后,内容为:
Java语言
100
说明:当外部文件不存在时,系统会自动创建该文件,但是如果文件路径中包含未创建的目录时将出现异常。这里书写的文件路径可以是绝对路径也可以是相对路径。
在 实际写入文件时,有两种写入文件的方式:覆盖和追加。其中“覆盖”是指清除原文件的内容,写入新的内容,默认采用该种形式写文件,“追加”是指在已有文件 的末尾写入内容,保留原来的文件内容,例如写日志文件时,一般采用追加。在实际使用时可以根据需要采用适合的形式。最基本的写入方法只支持byte数组格式的数据,所以如果需要将内容写入文件,则需要把对应的内容首先转换为byte数组。
其实,所有的数据文件,包括图片文件、声音文件等等,都是以一定的数据格式存储数据的,在保存该文件时,将需要保存的数据按照该文件的数据格式依次写入即可,而在打开该文件时,将读取到的数据按照该文件的格式解析成对应的逻辑即可。
使用FileWriter写入文件时,步骤和创建流对象的操作都和该示例代码一致,只是在转换数据时,需要将写入的数据转换为char数组,对于字符串来说,可以使用String中的toCharArray方法实现转换,然后按照文件格式写入数据即可。
(3)InputStreamReader和OutputStreamWriter的使用,用一个例子将文本保存到外置SD卡上,然后再从外置SD卡读文本来显示(提示:如果是保存在内置存储器上,在/data/data/appname/目录下查找文件就行)。运行界面
EditText textBox;
textBox = (EditText) findViewById(R.id.txtText1);
static final int READ_BLOCK_SIZE = 100;
save操作:
public void onClickSave(View view) {String str = textBox.getText().toString();try{ //---SD Card Storage--- File sdCard = Environment.getExternalStorageDirectory(); File directory = new File (sdCard.getAbsolutePath() + "/MyFiles"); directory.mkdirs(); File file = new File(directory, "textfile.txt"); FileOutputStream fOut = new FileOutputStream(file); OutputStreamWriter osw = new OutputStreamWriter(fOut);//---write the string to the file---osw.write(str);osw.flush(); osw.close();//---display file saved message---Toast.makeText(getBaseContext(),"File saved successfully!",Toast.LENGTH_SHORT).show();//---clears the EditText---textBox.setText("");}catch (IOException ioe){ioe.printStackTrace();}}
load操作:
public void onClickLoad(View view) {try{//---SD Storage--- File sdCard = Environment.getExternalStorageDirectory(); File directory = new File (sdCard.getAbsolutePath() + "/MyFiles"); File file = new File(directory, "textfile.txt"); FileInputStream fIn = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fIn); char[] inputBuffer = new char[READ_BLOCK_SIZE];String s = "";int charRead;while ((charRead = isr.read(inputBuffer))>0){//---convert the chars to a String---String readString = String.copyValueOf(inputBuffer, 0,charRead);s += readString;//add result append to s if file size larger than READ_BLOCK_SIZEinputBuffer = new char[READ_BLOCK_SIZE];//clear buffer}//---set the EditText to the text that has been read---textBox.setText(s);Toast.makeText(getBaseContext(),"File loaded successfully!",Toast.LENGTH_SHORT).show();}catch (IOException ioe) {ioe.printStackTrace();}}需要注意的是:外置SD路径不能指定硬路径,不同系统上是不一样的,所以一定要用getExternalStorageDirectory函数。另外,读写外部存储器是需要权限的<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
参考原文:http://blog.csdn.net/ilibaba/article/details/3955799
参考原文:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616367.html
参考原文:http://blog.csdn.net/j00152685/article/details/5354862
参考原文:http://blog.csdn.net/ahxu/article/details/249610
- System.currentTimeMillis() 设置安卓系统时间 && Timer和TimerTask && java的File相关 && java的IO相关
- Java的Timer和TimerTask
- JAVA获取当前系统时间System.currentTimeMillis()
- JAVA获取当前系统时间System.currentTimeMillis()
- JAVA获取当前系统时间System.currentTimeMillis()
- Java获取当前系统时间System.currentTimeMillis()
- JAVA获取当前系统时间System.currentTimeMillis()
- JAVA获取当前系统时间System.currentTimeMillis()
- JAVA获取当前系统时间System.currentTimeMillis()
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- java类Timer和TimerTask的使用
- 百度搜索结果页面的参数 搜索历史记录(rsv_sug)
- mini2440 developing manual
- HQL运算符
- 破解“还原卡”技术方法
- 互联网的回归3:类比
- System.currentTimeMillis() 设置安卓系统时间 && Timer和TimerTask && java的File相关 && java的IO相关
- jstl标签库分页
- Myeclipse 9.0正式版破解注册码 注册机使用方法
- POJ 1087 UNIX dinic
- .NET组件程序设计(书)
- jrockit的dump操作简介
- 【转】Linux Iptables命令详解
- 如果在HTML中重复调用一段导航代码
- 从记事本转向牛逼IDE——eclipse, pdt(PHP Development Tool)配置手记