是否有可能在Linux(和/或其他Unix)上"缩小"文件?我想将它用于持久队列(没有适合我需要的现有实现).从文件的结尾我猜可以使用truncate().
前言:
我正在尝试sun.nio.ch.SourceChannelImpl使用JDK中存在的包私有构造函数的包私有类子类(在rt.jar中),所以我必须在sun.nio.ch包中创建它.
这是我的子类:
package sun.nio.ch;
import java.io.FileDescriptor;
import java.nio.channels.spi.SelectorProvider;
class MySourceChannel extends SourceChannelImpl {
public MySourceChannel(SelectorProvider sp, FileDescriptor fd) {
super(sp, fd);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的简单测试:
package sun.nio.ch;
import java.io.FileDescriptor;
public class Main {
public static void main(String[] args) {
new MySourceChannel(null, FileDescriptor.in);
}
}
Run Code Online (Sandbox Code Playgroud)
而这是失败:
Exception in thread "main" java.lang.IllegalAccessError: class sun.nio.ch.MySourceChannel cannot access its superclass sun.nio.ch.SourceChannelImpl
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native …Run Code Online (Sandbox Code Playgroud) 我正在使用PCRE,但我不明白为什么偏移量矢量必须是3的倍数。这是来自pcredemo.c(rc是的结果pcre_exec()):
/* The output vector wasn't big enough */
if (rc == 0) {
rc = OVECCOUNT / 3;
printf("ovector only has room for %d captured substrings\n", rc - 1);
}
/* Show substrings stored in the output vector by number. Obviously, in a real
* application you might want to do things other than print them. */
for (i = 0; i < rc; i++) {
char *substring_start = subject + ovector[2 * i];
int …Run Code Online (Sandbox Code Playgroud) 我有一个带有数据库数据源的Web应用程序,在META-INF/context.xml中定义:
<Context>
<Resource
name="jdbc/mkddb"
auth="Container"
type="javax.sql.DataSource"
maxActive="10"
maxIdle="5"
maxWait="10000"
driverClassName="org.postgresql.Driver"
username="woky"
password="XYZ"
url="jdbc:postgresql://[::1]:5433/mkddb" />
</Context>
Run Code Online (Sandbox Code Playgroud)
这是我的peristence.xml:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="myJpaUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:comp/env/jdbc/mkddb</non-jta-data-source>
<class>mkd.model.User</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
这就是我在测试代码中运行Tomcat(7.0.8)的方法:
Tomcat tomcat = new Tomcat();
tomcat.addWebapp("", "ROOT");
tomcat.enableNaming();
tomcat.start();
System.in.read();
tomcat.stop();
Run Code Online (Sandbox Code Playgroud)
我的工作区中有一个tomcat.8080目录,其中包含webapps和工作目录.ROOT指向src/main/webapp(所有Java代码都在类路径中).
问题是,当我运行此代码时,我得到以下异常:
javax.persistence.PersistenceException: [PersistenceUnit: myJpaUnit] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:892)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
at com.google.inject.persist.jpa.JpaPersistService.start(JpaPersistService.java:94)
at com.google.inject.persist.PersistFilter.init(PersistFilter.java:77)
at com.google.inject.servlet.FilterDefinition.init(FilterDefinition.java:114)
at com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:98)
at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:273)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:254)
at …Run Code Online (Sandbox Code Playgroud) 我刚刚发现return以下闭包中的s将从函数返回findPackage
def findPackage(name: String, suffix: Option[String] = None): Path = {
logger.debug("Looking for package {} with suffix {}", name, suffix)
val path: Path = using(Files.newDirectoryStream(appDir)) {dirs =>
for (val path <- dirs) {
val matcher = packagePattern.matcher(path.getFileName.toString)
if (matcher.matches() && matcher.group(1).equals(name))
if (suffix.isDefined) {
if (matcher.group(2) != null && matcher.group(2).equals(suffix.get))
return path
} else
return path
}
throw new PackageNotFoundException(this, name, suffix)
}
logger.debug("Found package is {}", path)
path
}
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式做一个本地回报吗?谢谢.
我BufferedInputStream想从中解析XML,SAXParser然后再重复使用它(例如.mark(int)&reset()).但是这个流在parse()方法中是关闭的.有可能以某种方式告诉SAXParser它保持开放吗?最后一种方法是使用不可关闭的流包装此流.
谢谢.
我想在Scala中使用NIO.2特性(类在java.nio.file中):
在Java中我会这样做:
Files.newDirectoryStream(Paths.get("/tmp"), new DirectoryStream.Filter<Path>() {
@Override
public boolean accept(Path entry) throws IOException {
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
我怎么能在Scala中做同样的事情?该Fitler是内部的静态接口DirectoryStream界面.
谢谢.
编辑:如果您想建议我另一个列出文件的库/方法,请不要回复.我主要对主要问题感兴趣.