
java没有函数能直接拿到文件的创建时间lastModified()只能获得最后一次修改时间
想要拿到创建时间必须依赖Windows系统的API,通过调CMD命令实现,
代码如下:
public static void main(String[] args) {
try {
Process p = RuntimegetRuntime()exec(
"cmd /C dir d:\\testtxt /tc");
InputStream is = pgetInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str;
int i = 0;
while ((str = brreadLine()) != null) {
i++;
if (i == 6) {
Systemoutprintln(strsubstring(0, 17));
}
}
} catch (javaioIOException exc) {
excprintStackTrace();
}
}
你们这些人都不看MSDN啊?
FileGetCreationTime 方法
NET Framework 4 其他版本 NET Framework 35
NET Framework 30
NET Framework 20
Silverlight
返回指定文件或目录的创建日期和时间。
命名空间: SystemIO
程序集: mscorlib(在 mscorlibdll 中)
语法
--------------------------------------------------------------------------------
C#C++F#VB
复制
public static DateTime GetCreationTime(
string path
)
参数
path
类型:SystemString
要获取其创建日期和时间信息的文件或目录。
返回值
类型:SystemDateTime
一个 DateTime 结构,它被设置为指定文件或目录的创建日期和时间。 该值用本地时间表示。
在Linux中,没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变时间。也就是说不能知道文件的创建时间。但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过,那么状态改变时间=创建时间;如果文件创建后,没有被读取过,那么访问时间=创建时间,这个基本不太可能。
与文件相关的几个时间:
1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。
2、修改时间,对文件内容修改一次,这个时间就会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。
3、状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令 文件名。
比如: [jing@zhjh c]$ stat tempc
引用:
File: 'tempc'
Size: 66 Blocks: 8 IO Block: 4096 \u4e00\u822c\u6587\u4ef6
Device: 807h/2055d Inode: 1191481 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 500/ jing) Gid: ( 500/ jing)
Access: 2008-03-12 20:19:45000000000 0800
Modify: 2008-03-12 20:19:45000000000 0800
Change: 2008-03-12 20:19:45000000000 0800
说明:Access访问时间。Modify修改时间。Change状态改变时间。可以stat 查看这个目录所有文件的状态。
数据库中的文件的话,要adb shell进去查看数据库有没有该字段。存储卡上的文件的话,java中没有获取文件创建事件的接口。
一、 从resource中的raw文件夹中获取文件并读取数据(资源文件只能读不能写)
String res = "";
try{
InputStream in = getResources()openRawResource(Rrawbbi);
//在\Test\res\raw\bbitxt,
int length = inavailable();
byte [] buffer = new byte[length];
inread(buffer);
//res = EncodingUtilsgetString(buffer, "UTF-8");
//res = EncodingUtilsgetString(buffer, "UNICODE");
res = EncodingUtilsgetString(buffer, "BIG5");
//依bbitxt的编码类型选择合适的编码,如果不调整会乱码
inclose();
}catch(Exception e){
eprintStackTrace();
}
myTextViewsetText(res);//把得到的内容显示在TextView上
二、 从asset中获取文件并读取数据(资源文件只能读不能写)
String fileName = "yantxt"; //文件名字
String res="";
try{
InputStream in = getResources()getAssets()open(fileName);
// \Test\assets\yantxt这里有这样的文件存在
int length = inavailable();
byte [] buffer = new byte[length];
inread(buffer);
res = EncodingUtilsgetString(buffer, "UTF-8");
}catch(Exception e){
eprintStackTrace();
}
三、 从sdcard中去读文件,首先要把文件通过\android-sdk-windows\tools\adbexe把本地计算机上的文件copy到sdcard上去,adbexe push e:/Ytxt /sdcard/, 不可以用adbexe push e:\Ytxt \sdcard\ 同样: 把仿真器上的文件copy到本地计算机上用: adb pull /data/data/comtt/files/Testtxt e:/
String fileName = "/sdcard/Ytxt";
//也可以用String fileName = "mnt/sdcard/Ytxt";
String res="";
try{
FileInputStream fin = new FileInputStream(fileName);
//FileInputStream fin = openFileInput(fileName);
//用这个就不行了,必须用FileInputStream
int length = finavailable();
byte [] buffer = new byte[length];
finread(buffer);
res = EncodingUtilsgetString(buffer, "UTF-8");
finclose();
}catch(Exception e){
eprintStackTrace();
}
myTextViewsetText(res);
Java只能读取到文件的最后修改时间,不能获取创建时间,
创建时间是利用了cmd命令获取的:
public class FileTest {
public static void main(String[] args) {
getCreateTime("d:\\test-1txt");
getModifiedTime("d:\\test-1txt");
}
public static void getCreateTime(String filePath) {
String strTime = null;
try {
Process p = RuntimegetRuntime()exec("cmd /C dir " + filePath + "/tc");
InputStream is = pgetInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = brreadLine()) != null) {
if (lineendsWith("txt")) {
strTime = linesubstring(0, 17);
break;
}
}
} catch (IOException e) {
eprintStackTrace();
}
Systemoutprintln("创建时间 " + strTime);
}
public static void getModifiedTime(String filePath) {
long time = new File(filePath)lastModified();
String ctime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")format(new Date(time));
Systemoutprintln("修改时间[1] " + ctime);
}
}
java是用native来获取 *** 作系统的支持,从而对文件进行 *** 作。
具体实现类是
javaioFileSystem
这个类是私有的只能在jdk内部使用,由于这个类没有提供文件时间创建的接口,你也就没有办法用纯java来获得这一个功能(但愿不是这样)。
有一个简单的方法是自己调用系统函数,或者干脆调用各C函数
先写各本地类访问方法
class MyFileSystem{
public native void getCreatFileTime(File f);
static {
SystemloadLibrary( " ");
}
public static void main(String[] args) {
new HelloWorld()getCreatFileTime();
}
}
编译本文件
然后执行 javah,便会自动产生头文件 MyFileSystemh
函数的具体实现如下:
#include <jnih>
#include "MyFileSystemh "
#include <stdioh>
JNIEXPORT double JNICALL
Java_MyFileSystem_displayHelloWorld(JNIEnv env, jobject obj)
{
//在这里调用C函数
double time=getFileCreatTime_IN_C(obj)
return time;
}
我也在解决这方面的问题,这是我找到的,希望对你有所帮助。
以上就是关于如何用java获取一个文件的创建时间全部的内容,包括:如何用java获取一个文件的创建时间、C#中怎样获取文件的创建时间具体的代码怎么写、如何在Linux *** 作系统查看文件创建时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)