如何从多个具有相似名称的 .csv 文件中读取数据?
How to read data from multiple .csv files with similar names?
我在一个包含许多其他文件的文件夹中有多个以 CUSTOMER_YYYYMMDD.csv
开头的文件(每个文件都有自己的日期)。我的脚本(使用 BufferedReader
)已经可以从一个具体文件中读取数据,但我想从仅命名为 CUSTOMER_YYYYMMDD.csv
的文件中获取数据,但我想不出该怎么做。
这是我得到的:
public static void main(String[] args)
{
BufferedReader br = null;
try {
String line;
br = new BufferedReader(new FileReader("/Users/ovshievb/Desktop/IP/data/tcos/INPUT/CUSTOMER_20150401.csv"));
//Nacita hlavicku CSV failu aby ji preskocit
br.readLine();
// Cteni failu radek po radku
while ((line = br.readLine()) != null) {
// System.out.println("Raw CSV data: " + line);
System.out.println("Customer: " + csvToArray(line) + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) br.close();
} catch (IOException exception) {
exception.printStackTrace();
}
}
}
将你上面的代码块变成一个方法,该方法接受一个参数作为要读取的文件名。然后你所要做的就是为你想阅读的任何其他文件调用你的方法。
您可以使用 File#listFiles(FilenameFilter) 在 folder/directory 中获取过滤后的文件列表。只需提供过滤器的实现 - 您可以根据正则表达式检查文件名。
首先,您应该获得目录中所有文件的列表。这可以通过创建目录的文件对象然后调用 list()
方法来完成。
File myDirectory = new File(/path/to/my/dir/);
String[] containingFileNames = myDirectory.list();
之后您可以遍历所有文件名并检查名称是否与模式匹配 CUSTOMER_YYYYMMDD.csv
for (String fileName : containingFileNames) {
if (fileName.matches("CUSTOMER_\d*.csv") {
// Read this file with the BufferedReader like in your code above
}
}
首先获取文件夹中的所有CSV文件。然后递归读取它们。下面给出了获取文件夹中所有 CSV 文件的示例代码。
public static List<String> parseForCsvFiles(String parentDirectory){
File[] filesInDirectory = new File(parentDirectory).listFiles();
List<String> fileList = new ArrayList<String>();
for(File f : filesInDirectory){
if(f.isDirectory()){
parseForCsvFiles(f.getAbsolutePath());
}
String filePath = f.getAbsolutePath();
String fileExtenstion = filePath.substring(filePath.lastIndexOf(".") + 1,filePath.length());
if("csv".equals(fileExtenstion)){
//add to a list or array
fileList.add(filePath);
}
}
return fileList;
}
试试这个:
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
File folder = new File("/Users/ovshievb/Desktop/IP/data/tcos/INPUT/");
for(File file: folder.listFiles()){
String name = file.getName();
if(name.startsWith("CUSTOMER_")){
String date = name.replace("CUSTOMER_", "");
BufferedReader br = null;
try{
String line;
df.parse(date);
br = new BufferedReader(new FileReader("/Users/ovshievb/Desktop/IP/data/tcos/INPUT/"+ name));
//Nacita hlavicku CSV failu aby ji preskocit
br.readLine();
// Cteni failu radek po radku
while ((line = br.readLine()) != null) {
// System.out.println("Raw CSV data: " + line);
System.out.println("Customer: " + csvToArray(line) + "\n");
}
}catch(ParseException ex){
// Wrong date format.
} finally {
br.close();
}
}
}
我在一个包含许多其他文件的文件夹中有多个以 CUSTOMER_YYYYMMDD.csv
开头的文件(每个文件都有自己的日期)。我的脚本(使用 BufferedReader
)已经可以从一个具体文件中读取数据,但我想从仅命名为 CUSTOMER_YYYYMMDD.csv
的文件中获取数据,但我想不出该怎么做。
这是我得到的:
public static void main(String[] args)
{
BufferedReader br = null;
try {
String line;
br = new BufferedReader(new FileReader("/Users/ovshievb/Desktop/IP/data/tcos/INPUT/CUSTOMER_20150401.csv"));
//Nacita hlavicku CSV failu aby ji preskocit
br.readLine();
// Cteni failu radek po radku
while ((line = br.readLine()) != null) {
// System.out.println("Raw CSV data: " + line);
System.out.println("Customer: " + csvToArray(line) + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) br.close();
} catch (IOException exception) {
exception.printStackTrace();
}
}
}
将你上面的代码块变成一个方法,该方法接受一个参数作为要读取的文件名。然后你所要做的就是为你想阅读的任何其他文件调用你的方法。
您可以使用 File#listFiles(FilenameFilter) 在 folder/directory 中获取过滤后的文件列表。只需提供过滤器的实现 - 您可以根据正则表达式检查文件名。
首先,您应该获得目录中所有文件的列表。这可以通过创建目录的文件对象然后调用 list()
方法来完成。
File myDirectory = new File(/path/to/my/dir/);
String[] containingFileNames = myDirectory.list();
之后您可以遍历所有文件名并检查名称是否与模式匹配 CUSTOMER_YYYYMMDD.csv
for (String fileName : containingFileNames) {
if (fileName.matches("CUSTOMER_\d*.csv") {
// Read this file with the BufferedReader like in your code above
}
}
首先获取文件夹中的所有CSV文件。然后递归读取它们。下面给出了获取文件夹中所有 CSV 文件的示例代码。
public static List<String> parseForCsvFiles(String parentDirectory){
File[] filesInDirectory = new File(parentDirectory).listFiles();
List<String> fileList = new ArrayList<String>();
for(File f : filesInDirectory){
if(f.isDirectory()){
parseForCsvFiles(f.getAbsolutePath());
}
String filePath = f.getAbsolutePath();
String fileExtenstion = filePath.substring(filePath.lastIndexOf(".") + 1,filePath.length());
if("csv".equals(fileExtenstion)){
//add to a list or array
fileList.add(filePath);
}
}
return fileList;
}
试试这个:
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
File folder = new File("/Users/ovshievb/Desktop/IP/data/tcos/INPUT/");
for(File file: folder.listFiles()){
String name = file.getName();
if(name.startsWith("CUSTOMER_")){
String date = name.replace("CUSTOMER_", "");
BufferedReader br = null;
try{
String line;
df.parse(date);
br = new BufferedReader(new FileReader("/Users/ovshievb/Desktop/IP/data/tcos/INPUT/"+ name));
//Nacita hlavicku CSV failu aby ji preskocit
br.readLine();
// Cteni failu radek po radku
while ((line = br.readLine()) != null) {
// System.out.println("Raw CSV data: " + line);
System.out.println("Customer: " + csvToArray(line) + "\n");
}
}catch(ParseException ex){
// Wrong date format.
} finally {
br.close();
}
}
}