csv文件
要想对某个文件进行具体操作,首先要了解这个文件的结构。csv 全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件。CSV 文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串。它们大多使用逗号字符来分隔(或定界)数据,但有时使用其他字符,如分号等;
csv用Excel打开,解析并填充到表格
由于是纯文本结构就可以用txt方式打开
了解文件的结构后就可以读取文件并解析了。
由于是一个文件对象那么就需要用到Java IO
的File
对象
public class JavaReadCSV {
public static void main(String[] args) throws IOException {
File file = new File("D://Lession/(sample)sam_tianchi_mum_baby.csv");
FileReader fileReader = new FileReader(file);
BufferedReader reader = new BufferedReader(fileReader);
//(进阶)分割,
//取出表头分割
String head[] = reader.readLine().split(",");
//System.out.println(head);
while(reader.readLine() !=null ){
//System.out.println(reader.readLine());
String[] element_list = reader.readLine().split(",");
//String element_json = "{"+element_list[0]+","+element_list[1]+","+element_list[2]+"}";
/*
字符串的拼接逻辑
*/
if (reader.readLine() ==null) break;
}
}
}
上述代码就是读取csv文件并解析的过程,字符串拼接的逻辑自适用。可以装入java数据结构如list
,set
,map
等,也可以拼接称json字符串。
Jedis官方推荐的Java连接开发工具
如何将解析的数据存储到redis呢?和java操作mysql数据库一样,操作redis也需要工具包即相应的jar
文件,该包就是 Jedis
。
redis是当今基本所有互联网产品都在使用的一种提供键值对形式的内存数据库。之所以说是内存数据库,是因为redis基于内存的读取和写入相比传统的数据库基于磁盘IO快上数倍。Jedis就是Redis官方推荐的Java连接开发工具。
在Java中,Redis对应于Jedis就相当于关系数据库对应于JDBC。
Java使用redis的基本步骤:
- 下载并导入依赖
首先你需要下载驱动包 下载 jedis.jar
,确保下载最新驱动包。在你的 classpath 中包含该驱动包。
下载地址
若是基于maven需要导入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
maven仓库地址https://mvnrepository.com/
- jedis对象api
如图所示,创建jedis对象的主要参数。判断存储的value的类型选择合适的api操作。
由于小编存储的value是json字符串的类型,所以需要jedis操作字符串的api
图片来自淡写谢谢作者大大!
对使用jedis的api读取redis的数据:
import redis.clients.jedis.Jedis;
public class RedisConect {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.223.128",6379);
String csvfile = jedis.get("csvfile");
System.out.println(csvfile);
jedis.close();
}
}
Redis设置了密码的要给jedis配置密码,不然会报错。
import redis.clients.jedis.Jedis;
public class RedisConect {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.223.128",6379);
//配置连接密码
jedis.auth("root");
String csvfile = jedis.get("csvfile");
System.out.println(csvfile);
jedis.close();
}
}
读取到json字符串后可以使用第三方库如jackson,fastjson将其转化为json对象。
读取csv存储到redis并使用jedis操作
接上面BufferedReader
读取csv文件(数据解析逻辑省略根据需要修改),还有一种方法使用python读取csv,在java中调用python代码,这样可以省略数据解析的过程。
python读取csv存储到redis:
import csv
import redis
import json
r = redis.StrictRedis(host="192.168.223.128",port=6379,password='root')
def link_redis(json_list = []):
with open('D:\Lession\(sample)sam_tianchi_mum_baby.csv','rt',encoding="utf-8") as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
id = row['user_id']
birthday = row['birthday']
gender = row['gender']
#print(row)
json_list.append(row)
if __name__ == "__main__":
# print("Hello World")
new_list = []
link_redis(new_list)
r.set('csvfile',json.dumps(new_list))
print('存储完成!')
java调用python代码:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class JavaAndPython {
public static void main(String[] args) {
try {
System.out.println("start");
String[] args1 = new String[]{"python", "D://Python/PycharmProjects/helloworld/redisTest.py"}; //D://Lession/test.py
Process pr = Runtime.getRuntime().exec(args1);
BufferedReader in = new BufferedReader(new InputStreamReader(
pr.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
pr.waitFor();
System.out.println("end");
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用Runtime.getRuntime().exec()方法加载python脚本。
通过上面方法将数据存储到redis。