long类型相乘为何结果事负数?

yhm2046 中级 2020-01-13 08:49:23
package com.example.a0113_log;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

/**
* 2020.1.13 需求:筛选最近五天内的文件,超过五天的文件删除
* 参考:https://blog.csdn.net/fujiakai/article/details/54087773
* https://blog.csdn.net/qq_41201881/article/details/81086535
*/
public class MainActivity2 extends AppCompatActivity {
//需要查找得文件根路径
private String rootPath="/sdcard/Download";
private String TAG = "wangp";
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };

/**
* 动态权限申请,android6.0以后读取sdcard必须申请
* @param activity
*/
public static void verifyStoragePermissions(Activity activity) {

try {
//检测是否有写的权限
int permission = ActivityCompat.checkSelfPermission(activity,
"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 没有写的权限,去申请写的权限,会弹出对话框
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
}
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
verifyStoragePermissions(this);

List<File> listFile=getFileSort(rootPath);
//打印list
// for(int i=0;i<listFile.size();i++)
// {
// File tmpFile=listFile.get(i);
// String date=LongTime2DateFormat(tmpFile.lastModified(),"yyyy-MM-dd HH:mm:ss");
// Log.i(TAG,tmpFile.getName()+"|"+date);
// }
delete5days(listFile);
}

/**
* 删除超过5天的文件
* @return
*/
public void delete5days(List<File> fileList){
//获取文件的时间戳
// List<File> srcFile=getFileSort(rootPath);
// 筛选出最近五天的文件:
// 时间差=目标文件时间-当前系统时间的绝对值
// 五天:day*hour*minute*second*mmcond
long fiveDayTime=30*24*60*60*1000; //这里为何是负数?
long currentTime=System.currentTimeMillis();
for(int i=0;i<fileList.size();i++)
{
long lastTime=fileList.get(i).lastModified();
long diffenTime=currentTime-lastTime;
if(diffenTime>fiveDayTime)
{
Log.i(TAG,"delet==>"+fileList.get(i).getName());
}
}
}

/**
*
* @param srcTime long类型的原始数据
* @param format yyyy-MM-dd HH:mm:ss
* @return String时间格式输出,失败则输出long转成得string
*/
public String LongTime2DateFormat(long srcTime,String format){
try {
Date d=new Date(srcTime);
String time=new SimpleDateFormat(format).format(d);
return time;
} catch (Exception e) {
e.printStackTrace();
Log.i("wan","LongTime2DateFormat error:"+e.toString());
return srcTime+"";
}
}

/**
*
* 获取目录下所有文件
*
* @param realpath
* @param files
* @return
*/
public static List<File> getFiles(String realpath, List<File> files) {
File realFile = new File(realpath);
if (realFile.isDirectory()) {
File[] subfiles = realFile.listFiles();
for (File file : subfiles) {
if (file.isDirectory()) {
getFiles(file.getAbsolutePath(), files);
} else {
files.add(file);
}
}
}
return files;
}

/**
* 获取目录下所有文件(按时间降序)
*
* @param path
* @return
*/
public static List<File> getFileSort(String path) {
List<File> list = getFiles(path, new ArrayList<File>());
if (list != null && list.size() > 0) {
Collections.sort(list, new Comparator<File>() {
public int compare(File file, File newFile) {
if (file.lastModified() < newFile.lastModified()) {
return 1;
} else if (file.lastModified() == newFile.lastModified()) {
return 0;
} else {
return -1;
}
}
});
}
return list;
}


}
...全文
768 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhm2046 中级 2020-01-15
  • 打赏
  • 举报
回复
引用 4 楼 王能 的回复:
不加L的话默认是int类型 long fiveDayTime=30*24*60*60*1000;执行的方式是int*int*int*int*int得到一个int值然后隐式转成long,由于你公式乘的结果已经超出int值了,所以会出现错误
明白了,谢谢解惑
王能 2020-01-15
  • 打赏
  • 举报
回复
不加L的话默认是int类型 long fiveDayTime=30*24*60*60*1000;执行的方式是int*int*int*int*int得到一个int值然后隐式转成long,由于你公式乘的结果已经超出int值了,所以会出现错误
yhm2046 中级 2020-01-14
  • 打赏
  • 举报
回复
引用 2 楼 shuren 的回复:
改成这个看看 long fiveDayTime=30L*24L*60L*60L*1000L;
谢谢,就是这个已经解决
shuren 2020-01-14
  • 打赏
  • 举报
回复
改成这个看看
long fiveDayTime=30L*24L*60L*60L*1000L;
yhm2046 中级 2020-01-13
  • 打赏
  • 举报
回复
     //获取文件的时间戳
//        List<File> srcFile=getFileSort(rootPath);
//        筛选出最近五天的文件:
//        时间差=目标文件时间-当前系统时间的绝对值
//        五天:day*hour*minute*second*mmcond
        long fiveDayTime=30*24*60*60*1000;  //这里为何是负数?
        long currentTime=System.currentTimeMillis();
        for(int i=0;i<fileList.size();i++)
        {
            long lastTime=fileList.get(i).lastModified();
            long diffenTime=currentTime-lastTime;
            if(diffenTime>fiveDayTime)
            {
                Log.i(TAG,"delet==>"+fileList.get(i).getName());
            }
        }
    }

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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