我有一个文件(更具体地说,一个log4j配置文件),我希望能够读取文件并在代码中挑选出某些行并替换它们.例如,在文件中有一个文本字符串,指示存储它的目录,或记录器的级别.我希望能够在不读取文件,将其写入另一个文件以及删除原始文件的情况下替换这些文本字符串.有没有更有效的方法使用Java查找和替换文件中的文本?
以下是我正在尝试使用的文本文件的示例:
log4j.rootLogger=DEBUG, A0
log4j.appender.A0=org.apache.log4j.RollingFileAppender
log4j.appender.A0.File=C:/log.txt
log4j.appender.A0.MaxFileSize=100KB
log4j.appender.A0.MaxBackupIndex=1
log4j.appender.A0.layout=org.apache.log4j.RollingFileAppender
log4j.appender.A0.layout.ConversionPattern=%-4r [%t] %-5p: %c %x - %m%n
Run Code Online (Sandbox Code Playgroud)
我希望能够读取该文件并将'DEBUG'替换为另一个级别或替换文件目录名'C:/log.txt'.日志配置文件也是用xml编写的.下面是一个例子.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender class="org.apache.log4j.RollingFileAppender" name="A0">
<param name="append" value="false"/>
<param name="File" value="C:/log/.txt"/>
<param name="MaxBackupIndex" value="1"/>
<param name="MaxFileSize" value="100KB"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-4r [%t] %-5p: %c %x - %m%n"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="A0"/>
</root>
</log4j:configuration>
Run Code Online (Sandbox Code Playgroud)
我在想这种类型的实现可能会使用哈希映射吗?
我正在使用rpm -upgrade命令,并注意到rpm有不同的方法来处理修改后的配置文件,因此在升级过程中不会丢失.根据我的理解,如果修改了配置文件并使用rpm -U升级了包,则rpm会将原始属性文件重命名为{file} .rpmsave,并使用原始文件名{file}安装新配置文件.
但是,当我尝试使用我创建的包运行rpm -U时,我实际看到的是原始配置文件被删除,新配置文件被重命名为{file} .rpmsave.这是预期的行为吗?在我的安装脚本中,我还使用"sed"修改配置文件中的一些文本.这会干扰rpm在升级过程中处理配置文件的方式吗?
我正在使用g ++编译器在Ubuntu上运行eclipse,我正在尝试运行一个使用xerces的示例程序.
构建没有产生任何错误,但是当我试图运行程序时,我会收到此错误:
error while loading shared libraries: libxerces-c-3.1.so: cannot open shared object file: No such file or directory
libxerces-c-3.1.so在/opt/lib我在eclipse中作为库包含的目录中.我检查文件夹时文件就在那里.当我执行时echo $LD_LIBRARY_PATH,/opt/lib也列出了.
问题所在的任何想法?谢谢.
一个ldd libxerces-c-3.1.so命令产生以下输出:
linux-vdso.so.1 => (0x00007fffeafff000)
libnsl.so.1 => /lib/libnsl.so.1 (0x00007fa3d2b83000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa3d2966000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fa3d265f000)
libm.so.6 => /lib/libm.so.6 (0x00007fa3d23dc000)
libc.so.6 => /lib/libc.so.6 (0x00007fa3d2059000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fa3d1e42000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa3d337d000)
Run Code Online (Sandbox Code Playgroud) 我试图根据定义的模式将对象中的数据编组到xml文件中.但是,当我打印出xml文件时,我在xml标签上收到了额外的注释.有没有办法摆脱额外的命名空间注释(即ns2)
这是我从编组中收到的xml的一个例子.
<?xml version="1.0" encoding="UTF-8" standalone="yes">
<root xmlns:ns2="http://www.something.com/something">
<ns2:food>steak</ns2:food>
<ns2:beverage>water</ns2:beverage>
</root>
Run Code Online (Sandbox Code Playgroud)
我想要的是这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes">
<root xmlns="http://www.something.com/something">
<food>steak</food>
<beverage>water</beverage>
</root>
Run Code Online (Sandbox Code Playgroud)
这就是我的Java代码正在做的事情:
JAXBContext context = JAXBContext.newInstance("com.schema");
JAXBElement<FoodSchema> element = new JAXBElement<FoodSchema>
(new QName("FoodSchema"), Food.class, foodSchema);
Marshaller marshaller = context.createMarshaller();
OutputStream os = new FileOutputStream(object.getFilePath());
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(element, os);
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢!谢谢!
我正在尝试编写一个java程序,根据用户选择的内容初始化某些布局.我想要做的是尽量避免编写一堆if语句,以便在需要添加更多布局时,代码可以扩展以供将来使用.我听说实现这个的最好方法是使用多态,但我对多态的理解仍然有点模糊.
说我想实现这个案例:
if (user choose layoutA) { initialize layoutA }
if (user choose layoutB) { initialize layoutB }
if (user choose layoutC) {initialize layoutC }
Run Code Online (Sandbox Code Playgroud)
我正在考虑为要实现的类创建一个接口.令我困惑的是它在main()中是如何工作的,我是否还需要一个条件if或switch语句来确定实例化哪个类?
interface LayoutHandler {
public void initializeLayout();
}
class layoutA implements LayoutHandler {
public void initialize Layout {initialize layout A}
}
class layoutB implements LayoutHandler {
public void initialize Layout {initialize layout B}
}
class layoutC implements LayoutHandler {
public void initialize Layout {initialize layout C}
}
Run Code Online (Sandbox Code Playgroud)
然后在主要的某个地方:
public static void main() {
getlayoutselectionfromuser()
if …Run Code Online (Sandbox Code Playgroud) 我想知道如何为除了*和之外的任何角色制作正则表达式+.我试过([^*+]),(\[^*+])但两个表达似乎都是不正确的.有人可以指点我正确的方向吗?谢谢.
编辑:这是一个代码snipet.我已将下面建议的注册表附加到visual studio中,当我输入常规字符串时它仍然会生成错误.
<xsd:element name="elementName">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="/^[^*+]+$/"></xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)
编辑:我正在使用的示例字符串是"test"结果是模式约束失败,当前的reg ex: /^[^*+]+$/
我是boost和c ++的新手,并且正在尝试将对象序列化为二进制,然后对其进行反序列化.
我正在使用示例中的类:http://en.highscore.de/cpp/boost/serialization.html
所以假设这是我尝试序列化的类:
class person
{
public:
person() { }
person(int age) : age_(age) { }
int age() const { return age_; }
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & age_;
}
int age_;
};
Run Code Online (Sandbox Code Playgroud)
这是序列化代码:
const char * save(Object ss)
{
boost::archive::binary_oarchive oa(ss);
person p(31);
oa << p;
return ss.str().data();
}
Run Code Online (Sandbox Code Playgroud)
这是反序列化代码:
void load(const char * str)
{
stringstream s;
s << str;
boost::archive::binary_iarchive ia(s); …Run Code Online (Sandbox Code Playgroud) 我正在尝试将字符串流中的数据存储到向量中.我可以成功地这样做但它忽略了字符串中的空格.如何使空间也被推入向量?
谢谢!
代码存根:
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main()
{
stringstream s;
string line = "HELLO HELLO\0";
stringstream stream(line);
unsigned char temp;
vector<unsigned char> vec;
while(stream >> temp)
vec.push_back(temp);
for (int i = 0; i < vec.size(); i++)
cout << vec[i];
cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用log4j编写一个记录器.一旦我加载了log4j.properties或log4j.xml文件,我就想知道是否有办法检测记录器配置文件是否有效.如果它无效,我希望加载默认设置(位于另一个文件中).
谢谢
是否可以将const char*放入字符串流中?
我认为在stringstream中使用write()函数是可能的,但是如果我只知道const char*,我就无法弄清楚如何获取streamize.
假设size是我的const char*变量:
stringstream s;
s.write(temp,size);
Run Code Online (Sandbox Code Playgroud)
我如何获得尺寸?谢谢.
java ×4
c++ ×3
binary ×1
boost ×1
config ×1
find ×1
hashmap ×1
if-statement ×1
inheritance ×1
interface ×1
jaxb ×1
log4j ×1
marshalling ×1
polymorphism ×1
regex ×1
replace ×1
rpm ×1
shared ×1
stringstream ×1
upgrade ×1
validation ×1
vector ×1
xml ×1