小编Joh*_*orn的帖子

检查文件是否在(子)目录中

我想检查现有文件是在特定目录中还是在其子目录中.

我有两个File对象.

File dir;
File file;
Run Code Online (Sandbox Code Playgroud)

两者都保证存在.我们假设

dir  = /tmp/dir 
file = /tmp/dir/subdir1/subdir2/file.txt
Run Code Online (Sandbox Code Playgroud)

我希望此检查返回true

现在我正在这样检查:

String canonicalDir = dir.getCanonicalPath() + File.separator;
boolean subdir = file.getCanonicalPath().startsWith(canonicalDir);
Run Code Online (Sandbox Code Playgroud)

这似乎适用于我的有限测试,但我不确定这是否会在某些操作系统上出现问题.我也不喜欢getCanonicalPath()可以抛出我必须处理的IOException.

有没有更好的办法?可能在某些图书馆?

谢谢

java

10
推荐指数
4
解决办法
1万
查看次数

如何在命令行上指定 Maven 依赖插件 get 的版本范围

我正在尝试使用 Maven 依赖插件来获取特定版本范围内的工件。我需要在命令行(或在脚本中)执行此操作

这是我尝试过的:

mvn dependency:get -Dartifact="junit:junit:[4.0,4.11)"
Run Code Online (Sandbox Code Playgroud)

然而,该范围显然并未得到认可。Maven 尝试下载文字版本为[4.0.0,4.11.0)的工件,但失败了。

我想我使用了错误的语法和/或没有正确转义。

我怎样才能让maven获得符合指定版本范围的最高版本的工件?

错误信息:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:get (default-cli) on project standalone-pom: Couldn't download artifact: Missing:
[ERROR] ----------
[ERROR] 1) junit:junit:jar:[4.0,4.11)
Run Code Online (Sandbox Code Playgroud)

dependencies maven-3 maven

6
推荐指数
1
解决办法
9835
查看次数

如何在JavaFX中调整字母间距

使用JavaFX2时,如何调整Text对象字符之间的字母间距?

欢迎使用代码或css中的示例.

css letter-spacing javafx-2

5
推荐指数
0
解决办法
3219
查看次数

在触发应用程序事件时创建 bean 时,如何避免 Spring 中的死锁?

当一个线程对 mongo 数据库执行查询时,我的应用程序中发生死锁,导致触发应用程序事件,而另一个线程尝试使用AutowireCapableBeanFactory.

这发生在 @Service 的构造函数中,并阻止整个应用程序的启动,因为服务是在启动时创建的。

伪代码:

@Service
public class MyService {

    @Autowired
    public MyService(AutowireCapableBeanFactory factory, TaskScheduler scheduler) {
        MyFirstCommand command1 = factory.getBean(MyFirstCommand.class);
        scheduler.schedule(command1, new Date());

        MySecondCommand command2 = factory.getBean(MySecondCommand.class);
        scheduler.schedule(command2, new Date());
    }
}

public class MyFirstCommand extends Runnable {

    @Autowired MongoOperations mongo;

    @Override
    public void run() {
       mongo.findById("some-id", MyData.class); 
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我有一些AbstractMongoEventListeners 注册为@Components。

死锁发生在一个线程MyFirstCommand.run()执行时mongo.findById()。另一个线程在MyService执行factory.getBean(MySecondCommand.class)的构造函数中:

Found one Java-level deadlock:
=============================
"pool-1-thread-1":
  waiting to lock monitor 0x00007fd05d5bf5d8 (object …
Run Code Online (Sandbox Code Playgroud)

java concurrency spring deadlock spring-boot

5
推荐指数
1
解决办法
3614
查看次数

如何对变量进行大括号扩展?

请考虑以下脚本:

#! /bin/bash -e

echo {foo,bar}
EX={foo,bar}
echo ${EX}
Run Code Online (Sandbox Code Playgroud)

该脚本的输出是:

foo bar
{foo,bar}
Run Code Online (Sandbox Code Playgroud)

echo想要执行大括号扩展的命令${EX}.因此,我希望看到一个输出

foo bar
foo bar
Run Code Online (Sandbox Code Playgroud)

我想创建一个脚本,用户可以在其中提供带有大括号的路径,其中复制了每个扩展版本.

像这样的东西:

#! /bin/bash -e

$SOURCES=$1
$TARGET=$2

cp -r ${SOURCES} ${TARGET}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

bash shell brace-expansion

2
推荐指数
1
解决办法
566
查看次数