我得到不同的结果为Files.exists(path),以path.toFile().exists()在Windows本地文件.我可以在Windows资源管理器中看到这个文件,虽然我有(随机)修改过的权限,也许权限没有意义.
但是,这并不能解释为什么旧方法返回true并且新方法返回false.该文件确定存在但可能对运行Java代码的用户不可见,因此我不确定应该是什么样的正确答案.我也无法看到如何查看哪个用户正在运行代码,计算机上只有一个真正的用户Paul,但我想知道是否以管理员身份运行或不影响事情.
System.out.println("Path Exists(1):"+Files.exists(path));
System.out.println("Path Exist(2) :"+path.toFile().exists());
Run Code Online (Sandbox Code Playgroud)
给
Path Exists(1):false
Path Exist(2) :true
Run Code Online (Sandbox Code Playgroud)
也
System.out.println("Path readable(3) :"+Files.isReadable(path));
System.out.println("Path readable(4):"+path.toFile().canRead());
Run Code Online (Sandbox Code Playgroud)
以同样的方式给予
Path readable(3) :false
Path readable(4):true
Run Code Online (Sandbox Code Playgroud)
权限输出
File C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf permissions
owner:PCLAPTOP\Paul
NT AUTHORITY\SYSTEM:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:DENY
BUILTIN\Administrators:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:DENY
BUILTIN\Administrators:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:ALLOW
NT AUTHORITY\SYSTEM:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:ALLOW
BUILTIN\Users:READ_DATA/READ_NAMED_ATTRS/EXECUTE/READ_ATTRIBUTES/READ_ACL/SYNCHRONIZE:ALLOW
NT AUTHORITY\Authenticated Users:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/SYNCHRONIZE:ALLOW
c:\Code\jthink\opensrc\jaudiotagger>attrib C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf
A R C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf
Run Code Online (Sandbox Code Playgroud)
更新 我没有得出结论,但认为这些信息可能有用.
我在IntelliJ IDE中运行代码而没有启用IDE Run选项的IDE Run程序,启用此功能后,Java应用程序也获得了管理员权限.
感兴趣的是另一个文件我没有添加任何DENY权限,我只是禁用了继承权限并从所有组中删除了READ权限.然后,当我作为用户运行而没有运行管理员启用它无法读取文件,此代码也无法输出任何信息
AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
if (view != null)
{
sb.append("Owner:"+view.getOwner().getName()+"**");
for (AclEntry acl : view.getAcl())
{
sb.append(acl.principal()+"**");
for(AclEntryPermission aep:acl.permissions()) …Run Code Online (Sandbox Code Playgroud) 如何在手机,平板电脑和计算机上制作一个看起来正确的简单Bootstrap Horizontal Form.即我希望组合如示例中所示对齐,但我不希望组合大于必要,我只想要标签和组合之间的小间隙.然后当屏幕尺寸太小而不适合标签和组合时,我希望它们堆叠.
特别是Boostrap示例耗尽了我不想要的整个100%宽度,我不希望组合更宽,然后必要,我不希望标签和组合之间有很大的差距.
我尝试添加col-auto,但随后组合不再相互水平对齐.
我现在尝试为https://getbootstrap.com/docs/4.1/components/forms/#column-sizing中描述的标签和组合添加col- [1-12]值但是当它转到小时它没有正确堆叠电话.
然后我尝试使用col-md,因此总数小于12,但它在主屏幕上看起来并不正确,因为现在标签和组合占用相同的空间,因此它们各有一半的屏幕,并且彼此不相距.
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" type="text/css">
<div>
<div class="form-row">
<label for="discogsGenreOverwriteOption" id="discogsGenreOverwriteOptionlabel" class="col-form-label col-xs-12 col-sm-6 col-md-5">
Genre
</label>
<div class="col-xs-12 col-sm-3 col-md-2">
<select aria-describedby="discogsGenreOverwriteOptionhelp" class="custom-select" name="discogsGenreOverwriteOption" id="discogsGenreOverwriteOption">
<option value="0">
Always replace values
</option>
<option value="1">
Always add values
</option>
<option value="2">
Replace if empty
</option>
<option selected="selected" value="3">
Never Replace
</option>
</select>
</div>
</div>
<div class="form-row">
<label for="discogsGenreFromOption" id="discogsGenreFromOptionlabel" class="col-form-label col-xs-12 col-sm-6 col-md-5">
From
</label>
<div class="col-xs-12 col-sm-3 …Run Code Online (Sandbox Code Playgroud)我比较歌曲名称,用拉丁文字(但并不总是),我的目标是一种算法,给出了一个高分,如果两页首歌的标题似乎是相同的同题和非常低的分数,如果他们没有任何共同之处.
现在我已经不得不使用Lucene和RAMDirectory来编写代码(Java) - 但是使用Lucene只是为了比较两个字符串太重,因此太慢了.我现在转向使用https://github.com/nickmancol/simmetrics,它有许多很好的算法来比较两个字符串:
BlockDistance
ChapmanLengthDeviation
ChapmanMatchingSoundex
ChapmanMeanLength
ChapmanOrderedNameCompoundSimilarity
CosineSimilarity
DiceSimilarity
EuclideanDistance
InterfaceStringMetric
JaccardSimilarity
Jaro
JaroWinkler
Levenshtein
MatchingCoefficient
MongeElkan
NeedlemanWunch
OverlapCoefficient
QGramsDistance
SmithWaterman
SmithWatermanGotoh
SmithWatermanGotohWindowedAffine
Soundex
Run Code Online (Sandbox Code Playgroud)
但是我不熟悉这些算法,那将是一个不错的选择?
我认为Lucene以某种形式使用CosineSimilarity,所以这是我的出发点,但我认为可能有更好的东西.
具体来说,算法应该在短字符串上工作,并且应该理解单词的概念,即应该特别对待空格.拉丁文字的良好匹配是最重要的,但是韩文和中文等其他文字的良好匹配也是相关的,但我希望因为它们对待空间的方式需要不同的算法.
多年来我一直在 Intel MacMini 上构建 MacOs Java 应用程序,本质上是
现在在 MacOS M1 上构建它并且构建得很好。当我在 Mac M1 上运行时,它可以工作,但当我尝试在 Intel Macmini 上运行时,它会失败,并显示无法加载 JRE 环境
这是有道理的,因为当我构建它时,我只是提供一个基于 Adoptium Terium 17 的 M1 版本的单个 jre。但是我不明白如果这是我需要做的,我如何提供两个 JRE
下面我展示了主要的构建脚本
#!/bin/bash
#set -x
cd $HOME/code/jthink/songkong/src/main/scripts
hiutil -C -fapplehelpbook/SongKongHelp/SongKongHelp.helpindex applehelpbook/SongKongHelp/
cd $HOME/code/jthink/songkong
sudo rm -fr /Applications/SongKong.app
mvn -f pommacos.xml clean
mvn -f pommacos.xml -DskipTests=true install
rm -fr target/songkong-8.2
unzip target/songkong-8.2-distribution.zip -d target
ant
while read line; do
echo …Run Code Online (Sandbox Code Playgroud) 我所有的课都有
@版
注释,所以我假设他们使用乐观锁定.
但我在日志中的以下异常似乎表明我使用了悲观锁定.那是哪个呢?(我想使用乐观锁定)
update Song set acoustidFingerprint=?, acoustidId=?, album=?, albumArtist=?, albumArtistSort=?, albumSort=?, amazonId=?, arranger=?, artist=?, artistSort=?, artists=?, barcode=?, bpm=?, catalogNo=?, comment=?, composer=?, composerSort=?, conductor=?, country=?, custom1=?, custom2=?, custom3=?, custom4=?, custom5=?, discNo=?, discSubtitle=?, discTotal=?, djmixer=?, duration=?, encoder=?, engineer=?, fbpm=?, filename=?, genre=?, grouping=?, isCompilation=?, isrc=?, keyOfSong=?, language=?, lastModified=?, lyricist=?, lyrics=?, media=?, mixer=?, mood=?, musicbrainzArtistId=?, musicbrainzDiscId=?, musicbrainzOriginalReleaseId=?, musicbrainzRecordingId=?, musicbrainzReleaseArtistId=?, musicbrainzReleaseCountry=?, musicbrainzReleaseGroupId=?, musicbrainzReleaseId=?, musicbrainzReleaseStatus=?, musicbrainzReleaseType=?, musicbrainzWorkId=?, musicipId=?, occasion=?, originalAlbum=?, originalArtist=?, originalLyricist=?, originalYear=?, producer=?, quality=?, rating=?, recordLabel=?, releaseYear=?, remixer=?, script=?, subtitle=?, tags=?, tempo=?, title=?, …Run Code Online (Sandbox Code Playgroud) 我的Docker文件是song / songkong,位于https://hub.docker.com/r/songkong/songkong/~/dockerfile/
FROM openjdk:8-jre-alpine
RUN apk --no-cache add \
ca-certificates \
curl \
fontconfig \
msttcorefonts-installer \
tini \
&& update-ms-fonts \
&& fc-cache -f
RUN mkdir -p /opt \
&& curl http://www.jthink.net/songkong/downloads/current/songkong-linux-headless-novm.tgz?val=77 | tar -C /opt -xzf - \
&& find /opt/songkong -perm /u+x -type f -print0 | xargs -0 chmod a+x
RUN addgroup -S songkong \
&& adduser -S -G songkong songkong
USER songkong:songkong
EXPOSE 4567
ENTRYPOINT ["/sbin/tini"]
# Config, License, Logs, Reports and Internal Database …Run Code Online (Sandbox Code Playgroud) 刚刚从Java 11迁移到Java 14
以下代码现在在 linux 机器上失败:
String linux_exe = System.getProperty("user.dir") + '/' + "fpcalc_arm32";
List<String> params = new ArrayList();
params.add(linux_exe);
params.add("-plain");
params.add("-length");
params.add(submittedSongLength);
params.add(file.getPath());
Process p = Runtime.getRuntime().exec(params.toArray(new String[1]));
Run Code Online (Sandbox Code Playgroud)
带堆栈跟踪
Cannot run program "/mnt/system/config/Apps/SongKong/songkong/fpcalc_arm32": error=0, Failed to exec spawn helper: pid: 13998, exit value: 127
java.io.IOException: Cannot run program "/mnt/system/config/Apps/SongKong/songkong/fpcalc_arm32": error=0, Failed to exec spawn helper: pid: 13998, exit value: 127
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at java.base/java.lang.Runtime.exec(Runtime.java:590)
at java.base/java.lang.Runtime.exec(Runtime.java:449)
at com.jthink.songkong.analyse.acoustid.AcoustId.generateFingerprint(AcoustId.java:217)
at com.jthink.songkong.analyse.acoustid.AcoustId.createAcoustIdFingerprint(AcoustId.java:106)
Run Code Online (Sandbox Code Playgroud)
Java 14 发生了什么变化会导致这种情况?
我使用 …
根据我的一些客户,Java应用程序在Windows 7兼容模式下运行速度更快,但为什么呢?
我自己似乎没有问题,但他们发现应用程序似乎消耗100%的CPU而无所事事,只需设置exe或调用java到Windows XP兼容模式的批处理文件的属性修复它,如何可能是吗?
我正在为Java应用程序构建一个linux安装程序,最后我得到了一个install.jar和一个setup.sh,我把它放在一个使用ant的zip文件中.
想法是用户解压缩zip文件,然后运行setup.sh,但问题是他们总是需要chmod setup.sh首先给自己执行权限.
我想删除此步骤,我不确定问题部分是否:
我在 Windows 上使用 AdoptJDk 11.0.7 Java 并启用了-XX:+PrintCompilation标志,所以我可以看到正在编译哪些方法而不只是解释
我在我的应用程序中调用了一些功能(它处理音频文件并创建一个关于文件的 html 报告)。我启动应用程序一次(GUI 有限),然后在同一组文件上多次运行相同的任务。第二次调用它时,它的运行速度明显比第一次快,第三次比第二次略快,然后在后续运行之间没有太大区别。但是我注意到在每次运行时它仍在编译许多方法,并且许多方法变得不可重入。
它是分层编译,所以我理解相同的方法可以重新编译到更高级别,但编译的方法数量似乎没有太大变化。
我不明白为什么这么多方法变成不可重入(然后变成僵尸),我还没有做详细分析,但似乎相同的方法正在一遍又一遍地编译,为什么会这样?
我添加了-XX:-BackgroundCompilation强制方法按顺序编译的选项,并使代码等待编译版本而不是在编译时使用解释版本。这似乎减少了可重入方法的数量,所以也许这是因为它减少了多个线程尝试访问正在(重新)编译的方法的机会?
但仍有许多方法似乎被重新编译
例如,在这里我可以看到它被编译到第 3 级,然后它被编译到第 4 级,因此第 3 级编译成为非进入和僵尸。但是随后第 4 级变得不可重入,它又回到第 4 级编译,依此类推。