2021-08-18 黑白名单缓存

一、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();
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值