Java 在数据库和文件中多次写入数据
我正在从共享地图网络驱动器目录读取文件。在逐行读取文件后,登录到文件夹并插入数据库,然后删除。我发现一些文件多次记录相同的数据,但其他文件没有问题。为什么要记录多次?关闭缓冲区或文件读取或解析方法时有错误吗Java 在数据库和文件中多次写入数据,java,file,Java,File,我正在从共享地图网络驱动器目录读取文件。在逐行读取文件后,登录到文件夹并插入数据库,然后删除。我发现一些文件多次记录相同的数据,但其他文件没有问题。为什么要记录多次?关闭缓冲区或文件读取或解析方法时有错误吗 public static void main(String[] args) { while (true) { DirectoryFetcher fetch = new DirectoryFetc
public static void main(String[] args) {
while (true) {
DirectoryFetcher fetch = new DirectoryFetcher();
if (fetch.hasFile()) {
for(File file:fetch.getFiles()){
try {
if(file.isFile()){
boolean flag = fetch.read(file);
if(flag){
file.delete();
}
}
} catch (Exception e) {
logger.error(e.getMessage());
}
}
}
}
}
public class DirectoryFetcher {
public DirectoryFetcher() {
ServerParams params = Configuration.getConfig().getServerParams();
directory = new File(params.getLocalDirectory());
if (directory.isDirectory()) {
files = directory.listFiles();
}else{
logger.info("Map Network Drive is not Exist");
}
}
boolean read(File file){
BufferedReader br = null;
String line = null;
boolean flag = false;
StringBuffer appendMessage = null;
String completeMessage = null;
try {
if(file.exists()){
br = new BufferedReader(new FileReader(file));
appendMessage = new StringBuffer(16384);
while ((line = br.readLine()) != null) {
appendMessage.append(line);
appendMessage.append('\n');
}
if(appendMessage != null){
completeMessage = appendMessage.toString();
}
if (completeMessage != null) {
if (!completeMessage.equals("")) {
flag = new BioRad().parse(completeMessage,file);
}
}
}
} catch (FileNotFoundException e) {
logger.error(e.getMessage());
e.printStackTrace();
}catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
finally{
if(br != null){
try {
br.close();
} catch (IOException e) {
logger.error(e.getMessage());
e.printStackTrace();
}
}
}
return flag ;
}
}
public boolean parse(String message,File file) {
TestResultParser parser = null;
String[] records = message.split(RECORD_SPILIT_PATTERN);
List<String> result = new ArrayList<String>();
for (String record : records) {
result.add(record);
}
logger.info("result:: "+result.size() );
parser = new TestResultParser(result);
return log(parser,file );
}
private boolean log(TestResultParser parser,File file) {
boolean logFlag = false;
if(parser != null) {
TestResultMessage report = parser.getTestResultMessage();
//TestResultModel model = parser.getTestResultModel();
List<Result> list = parser.getTestResultModelList();
logger.info("list:: "+ list.size());
logFlag = (new DBLogger()).log(list);
// for(Result model:list){
// if(model != null && model.getTestCode() != null && !model.getTestCode().equals("")) {
// (new DBLogger()).log(model);
//
// }
// }
if(report != null) {
if (params.isOutputOnFile()) {
(new FileLogger()).log(report,file.getName());
}
}
}
return logFlag;
}
publicstaticvoidmain(字符串[]args){
虽然(正确){
DirectoryFetcher fetch=新的DirectoryFetcher();
如果(fetch.hasFile()){
对于(文件:fetch.getFiles()){
试试{
如果(file.isFile()){
布尔标志=fetch.read(文件);
国际单项体育联合会(旗){
delete();
}
}
}捕获(例外e){
logger.error(例如getMessage());
}
}
}
}
}
公共类目录获取程序{
公共目录获取程序(){
ServerParams params=Configuration.getConfig().getServerParams();
directory=新文件(params.getLocalDirectory());
if(directory.isDirectory()){
files=directory.listFiles();
}否则{
logger.info(“地图网络驱动器不存在”);
}
}
布尔读取(文件){
BufferedReader br=null;
字符串行=null;
布尔标志=假;
StringBuffer appendMessage=null;
字符串completeMessage=null;
试一试{
if(file.exists()){
br=新的BufferedReader(新的文件读取器(文件));
appendMessage=新的StringBuffer(16384);
而((line=br.readLine())!=null){
appendMessage.append(行);
appendMessage.append('\n');
}
if(appendMessage!=null){
completeMessage=appendMessage.toString();
}
if(completeMessage!=null){
如果(!completeMessage.equals(“”){
flag=new BioRad().parse(completeMessage,file);
}
}
}
}catch(filenotfounde异常){
logger.error(例如getMessage());
e、 printStackTrace();
}捕获(例外e){
logger.error(例如getMessage());
e、 printStackTrace();
}
最后{
如果(br!=null){
试一试{
br.close();
}捕获(IOE异常){
logger.error(例如getMessage());
e、 printStackTrace();
}
}
}
返回标志;
}
}
公共布尔解析(字符串消息,文件){
TestResultParser解析器=null;
String[]records=message.split(记录分割模式);
列表结果=新建ArrayList();
对于(字符串记录:记录){
结果.添加(记录);
}
logger.info(“结果::”+result.size());
解析器=新的TestResultParser(结果);
返回日志(解析器、文件);
}
私有布尔日志(TestResultParser解析器,文件){
布尔logFlag=false;
如果(解析器!=null){
TestResultMessage report=parser.getTestResultMessage();
//TestResultModel=parser.getTestResultModel();
List List=parser.getTestResultModelList();
logger.info(“列表::”+list.size());
logFlag=(新的DBLogger()).log(列表);
//对于(结果模型:列表){
//if(model!=null&&model.getTestCode()!=null&&model.getTestCode().equals(“”){
//(新的DBLogger()).log(模型);
//
// }
// }
如果(report!=null){
if(params.isoutputfile()){
(新文件记录器()).log(报告,文件.getName());
}
}
}
返回logFlag;
}
看起来有另一个进程同时写入网络文件。您需要在读取期间锁定该文件。我正在读取该文件并在将其存储到数据库之后进行解析。大多数文件都存储在数据库中,没有重复。