用java如何实现将大的日志文件分隔成小文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java如何实现将大的日志文件分隔成小文件相关的知识,希望对你有一定的参考价值。

答的好,增加分!
谢了,这个我知道,我想要的是日志文件要切割成等大的小文件的实现方法。

参考技术A 请使用LOG4J 组件去实现日志 记录 该组件提供 配置格式 时间 大小等。

比如如下配置

### set log levels ###
log4j.rootLogger =debug,stdout,D,E

###CONSOLE###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %dABSOLUTE %5p %c1:%L - %m%n

###FILE###
log4j.appender.D =org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:\\logs\\log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-dyyyy-MM-dd HH:mm:ss [ %l:%t:%r ] - [ %p ] %m%n

###ERROR TO ANOTHER FILE###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = D:\\logs\\error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-dyyyy-MM-dd HH:mm:ss [ %l:%t:%r ] - [ %p ] %m%n
参考技术B 用该类进行读写文件。。

RandomAccessFile

void seek(long pos)
设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。

可以设置 pos的值为 0 就行了。。

自己去查一下API文档可以更好的理解。。

在将大的txt文件读入R中的变量之前对其进行子集化[重复]

【中文标题】在将大的txt文件读入R中的变量之前对其进行子集化[重复]【英文标题】:subsetting a large txt file before reading it into the variable in R [duplicate] 【发布时间】:2014-07-29 01:24:37 【问题描述】:

我有一个大的 txt 文件(大约 2 百万行)。第一列是格式为 01/01/2006 的日期。 值用 ; 分隔

data <- read.table("largeFile.txt", sep=";")

dataToUse <- data[data$Date >= 01/02/2007 && data$Date <= 02/02/2007,]

示例行:

16/12/2006;17:36:00;5.224;0.478;232.990;22.400;0.000;1.000;16.000

上面的代码也不起作用,但是有没有办法先进行子集化,然后将数据加载到数据变量中?由于文件很大,加载需要一些时间?

【问题讨论】:

首先,学习help("&amp;&amp;"),了解为什么应该使用&amp;。然后查看包 data.table 中的fread 函数以加快导入速度。 另外,看看***.com/questions/1727772/… 【参考方案1】:

要使子集起作用,您需要引号和少一个 & 号。

dataToUse <- data[data$Date >= "01/02/2007" & data$Date <= "02/02/2007", ]

您也可以使用subset() 函数。

subset(data, Date >= "01/02/2007" & Date <= "02/02/2007")

接下来,如果日期列应该是一个日期类变量,您可以使用read.table() 中的参数colClasses 设置它的类。如果您愿意,可以通过这种方式设置所有列类,或者只使用一种方式。在将 colClasses 用于日期类变量之前,请确保您的日期格式正确。

最后,为了在将数据读入 R 之前对其进行子集化,我建议在终端或 shell 中使用 shell/unix 命令。 grepawksed 等函数可以在将数据发送到 R 之前轻松快速地减少数据。在 Windows 上,我建议您下载 Cygwin(它免费且快速),显然只是终端在基于 linux 的机器中。

【讨论】:

+1 建议使用 grep。

以上是关于用java如何实现将大的日志文件分隔成小文件的主要内容,如果未能解决你的问题,请参考以下文章

在将大的txt文件读入R中的变量之前对其进行子集化[重复]

怎么将文件用7Z压缩到最小

如何将大文本文件拆分为行数相等的小文件?

如何在 Dart/flutter 中将视频文件分割成小块?

将大制表符分隔文件读入R [重复]

如何使用udp将大文件从服务器传输到客户端