- 解决idea运行单java文件时因别的文件错误而报错的问题
- 为什么要使用在idea使用eclipse compiler(ecj)?
因为idea默认使用javac,而javac当在编译时发现一个编译错误就直接停止编译了。而ecj支持proceed on errors(出错时继续),这样就能够全局看到整个项目存在多少问题。
- 面试题https://www.cnblogs.com/ihmlt/p/12382588.html
- 判断类型
getClass()
- 读取一个csv文件为 HashMap 并自定义 key 行,再将HashMap 输出
文件夹为
├─ example1
│ ├─ src
│ │ ├─1.csv
│ │ ├─Deal_array.java
│ │ ├─MyFile.java
│ │ ├─output.csv
文件 1.csv
第0列,第1列,第2列
1.1,丙辰中秋,怒发冲冠
1.2,欢饮达旦,凭栏处
1.3,大醉,潇潇雨歇
1.4,作此篇,抬望眼
1.5,兼怀子由,仰天长啸
1.6,明月几时有,壮怀激烈
1.7,把酒问青天,三十功名尘与土
1.8,不知天上宫阙,八千里路云和月
1.9,今夕是何年,莫等闲
2.0,我欲乘风归去,白了少年头
2.1,又恐琼楼玉宇,空悲切
2.2,高处不胜寒,靖康耻
2.3,起舞弄清影,犹未雪
2.4,何似在人间,臣子恨
2.5,转朱阁,何时灭
2.6,低绮户,驾长车
2.7,照无眠,踏破贺兰山缺
2.8,不应有恨,壮志饥餐胡虏肉
2.9,何事长向别时圆,笑谈渴饮匈奴血
3.0,人有悲欢离合,待从头
3.1,月有阴晴圆缺,收拾旧山河
3.2,此事古难全,朝天阙
3.3,但愿人长久,等等等
3.4,千里共婵娟,等等等
Deal_array.java ,提供 Integer[] 的交并补
import java.util.*;
/**
* 用最少循环求两个数组的交集、差集、并集
*
*/
public class Deal_array
{
//构造方法
// Integer[] m = { 1, 2, 3, 4, 5 };
// Integer[] n = { 3, 4, 6 };
/**
* 求并集
*
* @param m
* @param n
* @return
*/
public Integer[] getB(Integer[] m, Integer[] n)
{
// 将数组转换为set集合
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(m));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(n));
// 合并两个集合
set1.addAll(set2);
Integer[] arr = {};
return set1.toArray(arr);
}
/**
* 求交集
*
* @param m
* @param n
* @return
*/
public Integer[] getJ(Integer[] m, Integer[] n)
{
List<Integer> rs = new ArrayList<Integer>();
// 将较长的数组转换为set
Set<Integer> set = new HashSet<Integer>(Arrays.asList(m.length > n.length ? m : n));
// 遍历较短的数组,实现最少循环
for (Integer i : m.length > n.length ? n : m)
{
if (set.contains(i))
{
rs.add(i);
}
}
Integer[] arr = {};
return rs.toArray(arr);
}
/**
* 求差集
*
* @param m
* @param n
* @return
*/
public Integer[] getC(Integer[] m, Integer[] n)
{
// 将较长的数组转换为set
Set<Integer> set = new HashSet<Integer>(Arrays.asList(m.length > n.length ? m : n));
// 遍历较短的数组,实现最少循环
for (Integer i : m.length > n.length ? n : m)
{
// 如果集合里有相同的就删掉,如果没有就将值添加到集合
if (set.contains(i))
{
set.remove(i);
} else
{
set.add(i);
}
}
Integer[] arr = {};
return set.toArray(arr);
}
}
MyFile.java
package com.example.myclass;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class MyFile {
/*
*读取一个csv文件并转化为hashmap, Integer[] pickkey = new Integer[]{0,3}
*/
public HashMap<String ,String> getHashMap(String pathname, Integer[] pickkey) {
//防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw;
//不关闭文件会导致资源的泄露,读写文件都同理
//Java7的try-with-resources可以优雅关闭文件,异常时自动关闭文件;详细解读https://stackoverflow.com/a/12665271
try (FileReader reader = new FileReader(pathname);
BufferedReader br = new BufferedReader(reader) // 建立一个对象,它把文件内容转成计算机能读懂的语言
)
{
HashMap<String, String> cacheMap = new HashMap<>();
String line;
int i = 1;
while ((line = br.readLine()) != null) {
if (i==1) {
i=2;
continue;
}
if(line.substring(line.length() - 1).equals(",") ){ //如果csv文件中有行的末尾有逗号
line = line.substring(0, line.length() - 1);
}
String[] newLine = line.split(",");
//所选的key
String tempkey = "";
for (int x:pickkey) {
tempkey = tempkey + "|" + newLine[x];
}
if (tempkey.substring(0,1).equals("|")) { //去除前面的 |
tempkey = tempkey.substring(1);
}
Integer[] n = new Integer[newLine.length];
for (i=0; i<newLine.length; i++) {
n[i] = i;
}
Integer[] differenceArray = new Deal_array().getC(pickkey, n); //去掉选取为Key的行,将余下的拼为value
String temvalue = "";
for(int x:differenceArray) {
temvalue =temvalue+"|"+ newLine[x] ;
}
if (temvalue.substring(0,1).equals("|")) { //去除前面的 |
temvalue = temvalue.substring(1);
}
cacheMap.put(tempkey, temvalue);
}
return cacheMap;
}
catch (IOException e) {
e.printStackTrace();
return null;
}
}
/*
* 传入目录形如 String pathname = "E:\mydocuments\java\donghuan\src\test\java\output\test.txt"
* 将会把HashMap存入一个本地文件,名为 test.txt
*/
public static void writeHashmapToFile(String pathname, Map<String, String> map) {
try {
File writeName = new File(pathname);
// writeName.createNewFile(); //只能在此文件不在的时候会创建,如存在同名文件则不执行,FileWriter可以在文件存在时仍然创建文件,也就是会删除原来文件再创建。
FileWriter writer = new FileWriter(pathname); //创建文件,如存在则清空
// FileWriter writer = new FileWriter(pathname, true); // 创建文件,true则为append模式,即存在文件即不清空,
BufferedWriter writerout = new BufferedWriter(writer); //缓冲流
for(Map.Entry x:map.entrySet()) {
String mm = x.getKey().toString() + "-->" + x.getValue().toString() + "\n";
System.out.println(mm);
writerout.write(mm);
}
writerout.flush(); // 把缓存区内容压入文件, 经过实验,如果不处理缓存区数据,最终写入数据会缺失。
writerout.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
HashMap<String ,String> x = new MyFile().getHashMap("E:\mydocuments\java\example1\src\\1.csv", new Integer[]{0});
new MyFile().writeHashmapToFile("E:\mydocuments\java\example1\src\\output.csv", x);
// for(Map.Entry<String, String> entry:x.entrySet()){
// System.out.println(entry.getKey() + "-->" + entry.getValue());
// }
// for (Object key:x.keySet()) {
// System.out.println(key.toString() + "-->"+ x.get(key).toString());
// }
}
}
out.csv , 这就是运行后的输出
|1.4|抬望-->|作此篇
|1.6|壮怀激-->|明月几时有
|2.5|何时-->|转朱阁
|3.4|等等-->|千里共婵娟
|2.4|臣子-->|何似在人间
|3.1|收拾旧山-->|月有阴晴圆缺
|1.2|凭栏-->|欢饮达旦
|2.2|靖康-->|高处不胜寒
|2.7|踏破贺兰山-->|照无眠
|1.9|莫等-->|今夕是何年
|1.8|八千里路云和-->|不知天上宫阙
|2.9|笑谈渴饮匈奴-->|何事长向别时圆
|1.1|怒发冲-->|丙辰中秋
|1.7|三十功名尘与-->|把酒问青天
|2.6|驾长-->|低绮户
|2.3|犹未-->|起舞弄清影
|3.2|朝天-->|此事古难全
|2.0|白了少年-->|我欲乘风归去
|3.0|待从-->|人有悲欢离合
|3.3|等等-->|但愿人长久
|2.1|空悲-->|又恐琼楼玉宇
|1.3|潇潇雨-->|大醉
|1.5|仰天长-->|兼怀子由
|2.8|壮志饥餐胡虏-->|不应有恨
java unix时间戳与标准时间的转换
import java.text.SimpleDateFormat;
import java.util.Date;
public class Mytest {
public static void main(String args[]) {
long time = new Date().getTime(); //得到unix 时间戳
time = time/1000;
System.out.println(time); // java默认为13位时间戳,需要转为10位
Date date =new Date(time*1000); //time为10位unix 时间戳,则需要变为13位
System.out.println(date); // java日期串符
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String t = simpleDateFormat.format(date); //将java日期串符转为设定格式
System.out.println(t);
}
}
java自带工具
自动删除的hashMap
public class Test {
static int MAX_HASH = 3;
public static void main(String[] args) {
//内存hash最大缓存量
// final int MAX_HASH = 3;
LinkedHashMap hashOne = new LinkedHashMap(MAX_HASH + 1, .75F, false)
{
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_HASH;
}
};
//测试
hashOne.put("aa", "H");
hashOne.put(1, "E");
hashOne.put(2, "L");
hashOne.put(3, "L");
hashOne.put(4, "O");
hashOne.put("bb", "L");
hashOne.put(3, "O");
System.out.println(hashOne);
String[] mylist = new String[] {"aa","bb","cc","dd","3"};
for(String one: mylist) {
if (!hashOne.containsKey(one)) {
hashOne.put(one, "O");
}
}
System.out.println(hashOne);
System.out.println(hashOne.containsKey(3));
}
}
java获取运行方法的名字
这种方式获取的话,数组的第一个元素是当前运行方法的名称,第二个元素是调用当前方法的方法名称
StackTraceElement[] stackTrace = new Exception().getStackTrace();
String methodName = stackTrace[0].getMethodName();
// 这种方式获取的话,数组的第二个元素是当前运行方法的名称,第三个元素是调用当前方法的方法名称
stackTrace = Thread.currentThread().getStackTrace();
String methodName = stackTrace[1].getMethodName();