一、Java使用openCSV
pom:
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.2</version>
</dependency>
写法:
String path = "F:\\download\\nba.csv";
File file = new File(path);
try {
FileReader fileReader = new FileReader(file);
Reader reader = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);
CSVReader csvReader = new CSVReader(reader);
String[] strings = csvReader.readNext(); //读取首行
List<String[]> items = csvReader.readAll(); //读取除首行外剩下的全部
System.out.println(Arrays.toString(strings));
// System.out.println(Arrays.toString(strings1.toArray()));
items.forEach(item -> {
System.out.println(Arrays.toString(item));
});
csvReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
OpenCSV是一个简单的用于解析CSV文件的java类库,它封装了CSV格式文件的输出和读入,可以自动处理CSV格式中的特殊字符
二、Neo4j Cypher语句拼写
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
<version>4.1.1</version>
</dependency>
Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "secsmart"));
try (Session session = driver.session()) {
try (Transaction tx = session.beginTransaction()) {
tx.run("create (s:test3)");
tx.commit();
}
}
三、MultipartFile类
第一句:一种可以接收使用多种请求方式来进行上传文件的代表形式。也就是说,如果你想用spring框架来实现项目中的文件上传功能,则MultipartFile可能是最合适的选择,而这里提到的多种请求方式则可以通俗理解为以表单的形式提交
第二句:这个文件内容可以存储到内存中或者存储在磁盘的临时位置上。
第三句:无论发生哪种情况,用户都可以自由地拷贝文件内容到session存储中,或者以一种永久存储的形式进行存储,如果有需要的话。
第四句:这种临时性的存储在请求结束之后将会被清除掉。
四、文件上传监听
五、三元运算符
(条件表达式) ? 表达式1:表达式2;
boolean c=20<45?true:false;
六、mybatis批量保存
七、redis删除所有的keys
Set<String> keys = redisTemplate.keys("*");
redisTemplate.delete(keys);
八、SpringBoot+commons-fileupload文件上传进度
github:
https://github.com/yangzheng0/upload
九、Linux显示行号
set nu
十、 java.io.IOException: 断开的管道
这个接口的功能是远程调用其他服务的接口去查找数据库数据,返回后缓存到redis中,由于数据量巨大,查询时间超过5s,而客户端中连接超时时间仅有5s。
java.io.IOException: 断开的管道
这是socket方面的异常信息,该异常在客户端和服务器均有可能发生,在抛出SocketExcepton:Connect reset by peer:Socket write error 后,如果再继续写数据则抛出该异常。
也就是说比如客户端发起一个请求,服务端处理请求花了很长时间,到了客户端指定超时时间后客户端关闭了连接,服务端处理完请求后要返回数据时找不到客户端了,于是报改错。
解决这个问题要么就是服务端提高处理请求的效率,要么就是客户端加大连接等待时间。
十一、java程序生成csv大文件
user类:
public class User {
private String id;
private String name;
private String ip;
private String random1;
private String random2;
private String random3;
private String random4;
private String random5;
private String random6;
private String random7;
public User() {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name=" + name +
", ip='" + ip + '\'' +
", random1='" + random1 + '\'' +
", random2='" + random2 + '\'' +
", random3='" + random3 + '\'' +
", random4='" + random4 + '\'' +
", random5='" + random5 + '\'' +
", random6='" + random6 + '\'' +
", random7='" + random7 + '\'' +
'}';
}
public User(String id, String name, String ip, String random1, String random2, String random3, String random4, String random5, String random6, String random7) {
this.id = id;
this.name = name;
this.ip = ip;
this.random1 = random1;
this.random2 = random2;
this.random3 = random3;
this.random4 = random4;
this.random5 = random5;
this.random6 = random6;
this.random7 = random7;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getRandom1() {
return random1;
}
public void setRandom1(String random1) {
this.random1 = random1;
}
public String getRandom2() {
return random2;
}
public void setRandom2(String random2) {
this.random2 = random2;
}
public String getRandom3() {
return random3;
}
public void setRandom3(String random3) {
this.random3 = random3;
}
public String getRandom4() {
return random4;
}
public void setRandom4(String random4) {
this.random4 = random4;
}
public String getRandom5() {
return random5;
}
public void setRandom5(String random5) {
this.random5 = random5;
}
public String getRandom6() {
return random6;
}
public void setRandom6(String random6) {
this.random6 = random6;
}
public String getRandom7() {
return random7;
}
public void setRandom7(String random7) {
this.random7 = random7;
}
}
生成文件:
public class makecsv {
public static <T> String exportCsv(String[] titles, String[] propertys, List<T> list) throws IOException, IllegalArgumentException, IllegalAccessException{
File file = new File("d:\\test2.csv");
//构建输出流,同时指定编码
OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
//csv文件是逗号分隔,除第一个外,每次写入一个单元格数据后需要输入逗号
for(String title : titles){
ow.write(title);
ow.write(",");
}
//写完文件头后换行
ow.write("\r\n");
//写内容
for(Object obj : list){
//利用反射获取所有字段
Field[] fields = obj.getClass().getDeclaredFields();
for(String property : propertys){
for(Field field : fields){
//设置字段可见性
field.setAccessible(true);
if(property.equals(field.getName())){
ow.write(field.get(obj).toString());
ow.write(",");
continue;
}
}
}
//写完一行换行
ow.write("\r\n");
}
ow.flush();
ow.close();
return "0";
}
public void test() throws IOException, IllegalArgumentException, IllegalAccessException{
String[] titles = new String[]{"id","name","ip","random1","random2","random3","random4","random5","random6","random7"};
String[] propertys = new String[]{"id","name","ip","random1","random2","random3","random4","random5","random6","random7"};
List<User> list = new ArrayList<User>();
for (int i = 0; i <4000000 ; i++) {
User user = new User();
user.setId(getStringRandom(20));
user.setName(getStringRandom(20));
user.setIp(getStringRandom(20));
user.setRandom1(getStringRandom(20));
user.setRandom2(getStringRandom(20));
user.setRandom3(getStringRandom(20));
user.setRandom4(getStringRandom(20));
user.setRandom5(getStringRandom(20));
user.setRandom6(getStringRandom(20));
user.setRandom7(getStringRandom(20));
list.add(user);
System.out.println(i);
}
exportCsv(titles,propertys, list);
}
public String getStringRandom(int length) {
String val = "";
Random random = new Random();
//参数length,表示生成几位随机数
for(int i = 0; i < length; i++) {
String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
//输出字母还是数字
if( "char".equalsIgnoreCase(charOrNum) ) {
//输出是大写字母还是小写字母
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
val += (char)(random.nextInt(26) + temp);
} else if( "num".equalsIgnoreCase(charOrNum) ) {
val += String.valueOf(random.nextInt(10));
}
}
return val;
}
public static void main(String[] args) {
makecsv makecsv = new makecsv();
try {
makecsv.test();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}