java的System.currentTimeMillis() && Timer和TimerTask && java的File相关 && java的IO相关
2013-01-10 10:52
627 查看
System.currentTimeMillis():可以提取到当前时间的毫秒数,产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数。常见作用:一般都是用2个时间的差值来得到运行时间。比如:
long start = System.currentTimeMillis();
// 这里可以加上你要运行的内容
long end = System.currentTimeMillis();
System.out.println("运行时间:"+(end - start));
示例如下:
输出即是
2013年01月10日 10时54分14秒
1357786454640
===============================================================================================================
J***A中也有类似VC中的定时执行函数,分别是定时器Timer、定时器任务TimerTask,两者组合起来使用。示例如下:
定义了一个定时器任务,里面必须完成抽象函数run。由于main是static函数,所以必须把task也申明成static,否则会有错误提示。定时器在5秒后调度执行定时器任务。如上执行结果是:
main run
schedule run
=========================================================================================================================
文件(File)是 最常见的数据源之一,在程序中经常需要将数据存储到文件中,例如图片文件、声音文件等数据文件,也经常需要根据需要从指定的文件中进行数据的读取。绝对路径是指书写文件的完整路径,例如d:\java\Hello.java,该路径中包含文件的完整路径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常用函数
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方法即可实现了。
上面循环读取文件数据到数组的过程,其实可以用一句话来代替int i = fis.read(data);返回的i则是真实读取的个数。
当然,在读取文件时,也可以使用Reader类的子类FileReader进行实现,在编写代码时,只需要将上面示例代码中的byte数组替换成char数组即可。使用FileReader读取文件时,是按照char为单位进行读取的,所以更适合于文本文件的读取,而对于二进制文件或自定义格式的文件来说,还是使用FileInputStream进行读取,方便对于读取到的数据进行解析和操作。
(2)在向文件中输出数据,也就是写文件时,使用对应的文件输出流,包括FileOutputStream和FileWriter两个类,下面以FileOutputStream为例子说明输出流的使用。示例代码如下:
该示例代码写入的文件使用记事本打开以后,内容为:
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操作:
load操作:
参考原文: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
long start = System.currentTimeMillis();
// 这里可以加上你要运行的内容
long end = System.currentTimeMillis();
System.out.println("运行时间:"+(end - start));
示例如下:
import java.text.SimpleDateFormat; //格式化输出 import java.util.Locale; public class TestNew { public static void main(String[] args)throws InterruptedException { // TODO Auto-generated method stub SimpleDateFormat sdf = new SimpleDateFormat("",Locale.SIMPLIFIED_CHINESE); sdf.applyPattern("yyyy年MM月dd日 HH时mm分ss秒"); System.out.println(sdf.format(System.currentTimeMillis())); System.out.println(System.currentTimeMillis()); } }
输出即是
2013年01月10日 10时54分14秒
1357786454640
===============================================================================================================
J***A中也有类似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 stub System.out.println("main run"); Timer timer = new Timer(); timer.schedule(task, 5000); } }
定义了一个定时器任务,里面必须完成抽象函数run。由于main是static函数,所以必须把task也申明成static,否则会有错误提示。定时器在5秒后调度执行定时器任务。如上执行结果是:
main run
schedule run
=========================================================================================================================
文件(File)是 最常见的数据源之一,在程序中经常需要将数据存储到文件中,例如图片文件、声音文件等数据文件,也经常需要根据需要从指定的文件中进行数据的读取。绝对路径是指书写文件的完整路径,例如d:\java\Hello.java,该路径中包含文件的完整路径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 stub FileInputStream 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_SIZE inputBuffer = 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
相关文章推荐
- 我的Java开发学习之旅------>System.nanoTime与System.currentTimeMillis的区别
- java的System.currentTimeMillis()和System.nanoTime()有什么区别?
- Java进阶(十六)使用new Date()和System.currentTimeMillis()获取当前时间戳
- java的System.currentTimeMillis()和System.nanoTime()
- java测试方法运行时间 System.currentTimeMillis();
- #.java返回一个不重复的字符串(UUID+System.currentTimeMillis())
- java: new Date().getTime() 与 System.currentTimeMillis() 与 System.nanoTime()
- Java进阶(十六)使用new Date()和System.currentTimeMillis()获取当前时间戳
- java使用new Date()和System.currentTimeMillis()获取当前时间戳
- java的System.currentTimeMillis()如何转换成C#的DateTime.Now.Ticks?
- java中的system.currenttimemillis()
- Java中的时间精度 .System.currentTimeMillis() 、System.nanoTime() 方法 使用
- Java中System.currentTimeMillis()和Date转换方式
- Java基础知识强化84:System类之exit()方法和currentTimeMillis()方法
- java的System.currentTimeMillis()如何转换成C#的DateTime.Now.Ticks?
- java使用new Date()和System.currentTimeMillis()获取当前时间戳(转载)
- java 记——关于System.currentTimeMillis()处理时间的问题
- java--System.nanoTime与System.currentTimeMillis的区别
- 关于Java中System.currentTimeMillis和System.nanoTime的错误认识
- Java进阶(十六)使用new Date()和System.currentTimeMillis()获取当前时间戳