openCsv
文件路径
/IdeaProjects/xxx/src/main/resources/RequestListBICIDSimplified.csv
文件样式
"KEY","NAME","ADDRESS1","ADDRESS2","CITY","STATE","COUNTRY","SWIFTCODE","NID","CHIPS","ABA","ISSWITCHING"
"KEY2","NAME2","ADDRESS12","ADDRESS22","CITY2","STATE2","COUNTRY2","SWIFTCODE2","NID2","CHIPS2","ABA2","ISSWITCHING2"
"KEY3","NAME3","ADDRESS13","ADDRESS23","CITY3","STATE3","COUNTRY3","SWIFTCODE3","NID3","CHIPS3","ABA3","ISSWITCHING3"
...
注意点
1.文件有空行,读取的时候要看空行读出来什么
2.最后要放在map里面降低时间复杂度.
代码
import com.opencsv.bean.CsvBindByPosition
import com.opencsv.bean.CsvToBean
import com.opencsv.bean.CsvToBeanBuilder
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringRunner
import org.springframework.transaction.annotation.Transactional
import org.springframework.util.ResourceUtils
import java.io.FileReader
@RunWith(SpringRunner::class)
@SpringBootTest(classes = [Application::class])
class CsvTests {
private val CSV_FILE_PATH = "classpath:RequestListBICIDSimplified.csv"
@Test
fun csv() {
val reader = FileReader(ResourceUtils.getFile(CSV_FILE_PATH))
val csvToBean: CsvToBean<BankInfo> =
CsvToBeanBuilder<BankInfo>(reader)
.withType(BankInfo::class.java)
.withIgnoreLeadingWhiteSpace(true)
.build()
csvToBean.parse().fold(mutableMapOf<String, String>()) {
result, bankInfo ->
result.apply { if(bankInfo.swiftCode.isNotBlank()) put(bankInfo.swiftCode,bankInfo.isSwitching) }
}
}
}
data class BankInfo(
@CsvBindByPosition(position = 7) var swiftCode:String = "",
@CsvBindByPosition(position = 11) var isSwitching:String = ""
)