7

I need something to get the hard link count from a file in a solaris10 os in java.

parsing ls -l is not an option.

I tried using posix for java http://bmsi.com/java/posix/index.html but couldn't manage to get it working.

Is there any other lightweight API or code to get this info?

DRTauli
  • 731
  • 1
  • 8
  • 25

3 Answers3

12

In Java 7 you can use the new file attributes API to get it with java.nio.file.Files.getAttribute(path, "unix:nlink").

The "unix" attribute view is not actually defined as part of the standard API (and the "posix" view does not give you nlink), but is available in the standard Oracle/OpenJDK implementation. On the other hand creating a link is now available with the standard createLink method on Files. Go figure.

Michał Politowski
  • 4,288
  • 3
  • 30
  • 41
  • Awesome... too bad we have se 6 as our standard right now. :( – DRTauli Jun 18 '12 at 04:47
  • So you better plan for upgrade, as [Java 6 will be out of life in 5 months (November 2012)](http://www.oracle.com/technetwork/java/eol-135779.html). – Tometzky Jun 19 '12 at 06:13
2

Short of using JNI and stat/lstat in C the only thing better than parsing ls would be to run:

stat --format=%h filename

which just outputs a number and is easy to parse.

But it all gets complicated when there can be non-ascii characters in filenames. You'd need to convert filename to native encoding, and sometimes not all characters allowed in filename can be converted (if native encoding isn't some kind of unicode).

Tometzky
  • 22,573
  • 5
  • 59
  • 73
  • Cool it works. Thanks! but one of the servers I've tested it on doesn't have stat... Are there any other solutions which doesn't require installation or something... thanks in advance. :) – DRTauli Jun 15 '12 at 08:26
  • is stat a linux only application? – DRTauli Jun 19 '12 at 00:53
0

Also consider trying the jnr-posix implementation of stat(2) for this.

kervin
  • 11,672
  • 5
  • 42
  • 59